ruby-on-rails – 在使用带有Rails / Spork / RSpec的database_cleaner时的SQLite3 :: SQLException

当试图在 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,那么您将在另一个事务中启动一个事务,而这是不允许的.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...