1

約 5 回の実行では問題なく動作しますが、その後はすべてのテストが次のエラーで失敗します。

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

Spork がないと発生せず、Spork を再起動すると正常に動作します。一定回数実行すると発生しませんが、毎回変化します。

これを引き起こす可能性のあるアイデアはありますか?

編集:

コントローラーコードを変更した場合にのみ発生します。

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
4

2 に答える 2

1

この行を削除してみてください:

config.use_transactional_fixtures = true

私のために働いたようです。トランザクションに関連していたので、エラー メッセージに導かれましたが、取引が何であるか正確にはわかりませんでした。spork のスレッドと sqlite3 に関係があるようです

于 2013-03-08T21:20:10.600 に答える
0

私はこのエラーをかなり抱えていましたが、最新バージョンの sqlite3 に更新することで修正できました。

bundle update sqlite3
于 2016-11-11T18:10:01.320 に答える