ruby-on-rails - 将 database_cleaner 与 Rails/Spork/RSpec 一起使用时出现 SQLite3::SQLException

标签 ruby-on-rails sqlite rspec spork

当尝试按照 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 = trueDatabaseCleaner.strategy = :transaction,您将在另一个事务中启动一个事务,这是不允许的。

关于ruby-on-rails - 将 database_cleaner 与 Rails/Spork/RSpec 一起使用时出现 SQLite3::SQLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220901/

相关文章:

ruby-on-rails - 如何使用 Rspec 和 Capybara 测试重定向

mysql - Carrierwave无法保存图像,使用引擎

ruby-on-rails - Ruby RI 失败,RDoc::Context::Section 的实例需要有方法 `marshal_load' (TypeError)

ruby-on-rails - 如何在 Rails 中处理多种用户类型?

javascript - Node.js 中的并行 SQLite 查询

objective-c - iOS中的sqlite3 COUNT个(特别是在iPhone/iPad上)

ruby-on-rails - Rspec:使用 js 提交表单时模型未更新

ruby-on-rails - 法拉第 gem 未定义方法 'bytesize' =' for Hash`

sql - SQL 表中的滚动行

ruby-on-rails - Guard-rspec 和 ember 不能很好地协同工作