当尝试按照 database_cleaner 的 GitHub page 上的示例进行操作时,我遇到了 RSpec 的以下错误:
ActiveRecord::StatementInvalid:
SQLite3::SQLException: cannot start a transaction within a transaction: begin transaction
spec_helper.rb 中使用的配置是:
require 'spork'
require 'database_cleaner'
Spork.prefork do
# .. snip
RSpec.configure do |config|
# .. snip
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
end
Spork.each_run do
end
最佳答案
接受的答案通过在每个测试后截断来使所有测试变慢(当不需要时)。
只需添加
config.use_transactional_fixtures = false
使用 database_cleaner 时。
如果您同时拥有 config.use_transactional_fixtures = true
和 DatabaseCleaner.strategy = :transaction
,您将在另一个事务中启动一个事务,这是不允许的。
关于ruby-on-rails - 将 database_cleaner 与 Rails/Spork/RSpec 一起使用时出现 SQLite3::SQLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220901/