DatabaseCleaner raising NoMethodError: undefined method `rollback' for nil:NilClass
DatabaseCleaner raising NoMethodError: undefined method `rollback' for nil:NilClass
我有一个 rails 应用程序,它使用 rspec 并包含 DatabseCleaner 以确保每次测试之间的测试数据库都是干净的。
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
的两次调用导致的竞争条件。
我有一个 rails 应用程序,它使用 rspec 并包含 DatabseCleaner 以确保每次测试之间的测试数据库都是干净的。
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
的两次调用导致的竞争条件。