我有一个使用rspec并包含DatabseCleaner的Rails应用程序,以确保每个测试之间的测试数据库都是干净的。
DatabaseCleaner在我们的配置spec/rails_helper.rb
与
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end
我们一直在ci环境中看到间歇性错误,在该环境中单个测试将失败
1) LibraryHours Required fields Library Hour must have a location
Failure/Error:
DatabaseCleaner.cleaning do
example.run
end
NoMethodError:
undefined method `rollback' for nil:NilClass
# ./spec/rails_helper.rb:66:in `block (2 levels) in <top (required)>'
我们无法使用rspec运行中的种子在本地重现错误,并且正在进行真正的故障调试。
因此,事实证明,一个开发人员(我)不了解rails_helper中的DatabaseCleaner调用已应用于所有规范,DatabaseCleaner.clean
并向其中一个规范文件添加了额外的调用。删除附件:
after do
DatabaseCleaner.clean
end
解决了这个问题。
我猜这是由两次调用引起的竞争状态DatabaseCleaner.clean
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句