3

rspec を使用して BDD を Rails アプリに統合しようとしています。監視プロセスを高速化するために、ガードレールとスポークレールを使用しています。このエラーが発生しています:

An error occurred in an after hook 
ActiveRecord::StatementInvalid: ArgumentError: prepare called on a closed database: 
rollback transaction occurred at /Users/davidhahn/.rvm/gems/ruby-1.9.3-p286/gems/sqlite3-1.3.6/lib/sqlite3/database.rb:91:in initialize

実行rake db:test:prepareしましたが、エラーなしで実行されました。私はsqliteを使用しているので、user_man_test.sqliteファイルがdb/. 私のテストは単純な統合テストです。

require 'spec_helper'

describe "Authentication" do
  describe "Login Page" do                                                 
    it "should have the h1 'Welcome to User Management'" do                
      visit '/log_in'                                                      
      page.should have_selector('h1', text: 'Welcome to User Management')  
    end                                                                    
  end                                                                      

  describe "Login" do                                                      
    before { visit '/log_in' }                                             

    describe "with invalid information" do                                 
      before { click_button "Login" }                                      

      it { should have_selector('h1', text: 'Welcome to User Management') }
      it { should have_selector('div.alert.alert-error', text: 'Invalid') }
    end                                                                    
  end                                                                      
end  

私の spec_helper.rb は次のようになります。

require 'rubygems' 
require 'spork'
Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
  RSpec.configure do |config|
    config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = true
    config.infer_base_class_for_anonymous_controllers = false
    config.order = "random"
  end
end
Spork.each_run do
  # This code will be run each time you run your specs.
end


助けてくれてありがとう

4

1 に答える 1

3

spork を適切に設定するために何時間も費やす代わりに、 Zeusを見ることをお勧めします。これがあなたの質問に正確に答えていない場合は申し訳ありませんが、私は spork でほぼ 1 年を過ごし、新しいテスト gem を追加するたびに構成に多くの問題を抱えていました。私の経験では、Zeus のパフォーマンスは Spork よりもはるかに優れています)。

于 2013-08-02T14:31:33.380 に答える