有没有办法强制 Rails 中的测试顺序?
Is there a way to force the order of tests in Rails?
我有一个包含 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
时,第2个测试先执行。这是为什么?
有没有办法强制测试顺序?
每次测试之间是否清除了数据库?
提前致谢。
从 Rails 5.0 开始,ActiveSupport 默认配置为 运行 随机测试。您可以在测试环境中使用配置设置 config.active_support.test_order = :sorted
更改该默认值:https://guides.rubyonrails.org/v5.0/configuring.html#configuring-active-support.
您的测试数据库不会在测试之间自动清除。大多数人为此目的使用 gem 之类的 Database Cleaner。
测试理论说测试不应该有依赖性,这意味着当你 运行 一个测试不应该依赖于另一个测试才能通过。
确保我们捕获依赖项的最佳方法是 运行 以随机顺序进行测试。
正如其他人所说,您可以按照提供的顺序强制测试 运行,但这被认为是一种不好的做法,我强烈建议您远离它。
更新:
在设置 (def setup
) 和测试 (test "..." do
) 中保留的所有固定装置、对象将在测试结束时被丢弃。您可以检查 log/test.log ($ tail -f log/test.log
) 以查看实际情况。这确保测试不会相互影响。每个测试都从一个干净的数据库的假设开始。
阅读https://api.rubyonrails.org/v6.1/classes/ActiveRecord/FixtureSet.html了解更多详情
我有一个包含 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
时,第2个测试先执行。这是为什么?
有没有办法强制测试顺序?
每次测试之间是否清除了数据库?
提前致谢。
从 Rails 5.0 开始,ActiveSupport 默认配置为 运行 随机测试。您可以在测试环境中使用配置设置 config.active_support.test_order = :sorted
更改该默认值:https://guides.rubyonrails.org/v5.0/configuring.html#configuring-active-support.
您的测试数据库不会在测试之间自动清除。大多数人为此目的使用 gem 之类的 Database Cleaner。
测试理论说测试不应该有依赖性,这意味着当你 运行 一个测试不应该依赖于另一个测试才能通过。
确保我们捕获依赖项的最佳方法是 运行 以随机顺序进行测试。
正如其他人所说,您可以按照提供的顺序强制测试 运行,但这被认为是一种不好的做法,我强烈建议您远离它。
更新:
在设置 (def setup
) 和测试 (test "..." do
) 中保留的所有固定装置、对象将在测试结束时被丢弃。您可以检查 log/test.log ($ tail -f log/test.log
) 以查看实际情况。这确保测试不会相互影响。每个测试都从一个干净的数据库的假设开始。
阅读https://api.rubyonrails.org/v6.1/classes/ActiveRecord/FixtureSet.html了解更多详情