2012-10-23 20 views
1

SQLite的例外約5次偉大的作品,但後來所有的測試失敗:使用RSpec,叉勺和數據庫清理

ArgumentError: prepare called on a closed database:   SELECT name 
      FROM sqlite_master 
      WHERE type = 'table' AND NOT name = 'sqlite_sequence' 

沒有叉勺不會發生,如果我重新啓動叉勺工作正常。運行一定次數後不會發生,但每次都會改變。

任何想法可能導致這種情況?

編輯:

它只發生在更改控制器代碼時。

spec_helper.rb:

require 'spork' 
require 'simplecov' 
SimpleCov.start 

Spork.prefork do 
    ENV['RAILS_ENV'] ||= 'test' 

    require File.expand_path('../../config/environment', __FILE__) 
    require 'rspec/rails' 
end 

Spork.each_run do # This code will be run each time you run your specs. 
    require 'capybara/rspec' 
    require 'capybara/rails' 

    # Requires supporting ruby files with custom matchers and macros, etc, 
    # in spec/support/ and its subdirectories. 
    Dir[Rails.root.join('spec/support/**/*.rb')].each {|f| require f} 

    RSpec.configure do |config| 
    config.mock_with :rspec 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    config.include RequestHelpers, :type => :request 

    config.before :suite do 
     DatabaseCleaner.strategy = :truncation 
     DatabaseCleaner.clean_with :truncation 
    end 

    config.before :each do 
     DatabaseCleaner.start 
    end 

    config.after :each do 
     DatabaseCleaner.clean 
    end 

    config.include(MailerHelpers) 
    config.before(:each) { reset_email } 
    end 
end 

回答

1

嘗試刪除這一行:

config.use_transactional_fixtures = true 

似乎已經爲我工作。我得到了錯誤消息的指導,因爲這是交易相關的,但並不完全確定交易是什麼。似乎有什麼關係spork的線程和sqlite3

0

我有這個錯誤不少,並能夠解決它通過更新到最新版本的sqlite3。

bundle update sqlite3