【问题标题】:Is there a way to force the order of tests in Rails?有没有办法强制 Rails 中的测试顺序?
【发布时间】:2021-04-01 22:06:22
【问题描述】:

我有一个带有 2 个测试的 ideas_test.rb 文件

test "create new idea" do
end
test "that Ideas are loaded in the index" do
end

当我运行rails test test/system/ideas_test.rb 时,首先执行第二个测试。这是为什么? 有没有办法强制测试顺序? 每次测试之间是否清除了数据库?

提前致谢。

【问题讨论】:

  • 这是故意的。您不希望您的测试依赖于订单。它们应该是幂等的,没有副作用。

标签: ruby-on-rails sorting testing capybara


【解决方案1】:

从 Rails 5.0 开始,ActiveSupport 被配置为默认以随机顺序运行测试。您可以在测试环境中使用配置设置 config.active_support.test_order = :sorted 更改该默认设置:https://guides.rubyonrails.org/v5.0/configuring.html#configuring-active-support

您的测试数据库不会在测试之间自动清除。大多数人为此使用像 Database Cleaner 这样的 gem。

【讨论】:

  • “您的测试数据库不会在测试之间自动清除。”,数据库不会被清除,但如果使用默认值,则每个示例都会回滚事务。
【解决方案2】:

测试理论认为测试不应该有依赖关系,这意味着当你运行一个测试时,它不应该依赖另一个测试来通过。

确保我们捕获依赖项的最佳方法是以随机顺序运行测试。

正如其他人所说,您可以强制测试以提供的顺序运行,但这被认为是一种不好的做法,我强烈建议您远离它。

更新:

在设置 (def setup) 和测试 (test "..." do) 中保留的所有夹具、对象将在测试结束时被丢弃。您可以检查 log/test.log ($ tail -f log/test.log) 以查看实际情况。这确保了测试不会相互影响。每个测试都假设一个干净的数据库开始。

阅读https://api.rubyonrails.org/v6.1/classes/ActiveRecord/FixtureSet.html了解更多详情

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 2011-03-28
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2016-05-07
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多