有没有办法强制 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了解更多详情