与此问题相关:自定义事务不适用于 rspec 中的 database_cleaner
有什么地方不想用 requires_new 开始 TX 吗?(其中嵌套 TX)
ModelObject.transaction(requires_new: true)
如果是这样的话,这应该是默认值。
顺便说一句,这是使用默认事务策略时,当代码的正常执行路径成功时,带有回滚的 rspec 测试将失败的原因。
这是我的 DatabaseCleaner 设置。运行导轨 4.
RSpec.configure do |config|
config.add_setting(:seed_tables)
config.seed_tables = %w(global_options shoot_types)
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation, except: config.seed_tables)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation, {except: config.seed_tables}
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end