2012-03-13 5 views
0

UPDATE:これは私のデータベースに関するものではなく、Spreeが私のテストで汚染されたメモリキャッシュに保存された設定に関するものです。下の私の答えを見てください。Rspecが環境設定値を変更して開発環境を汚染する


は、私は、Ruby 1.9.3-p0と、RSpecのレール2.8.1、2.8.0 RSpecので、Railsの3.1.4のシュプレーアプリケーションを実行しています。

私の開発マシンでは、RspecがWebrickと奇妙なやり取りをしているため、テスト用データベースを使用してWebrickインスタンスを実行していると思われています。

私は自分にHomeControllerのための1つの仕様があります。

require 'spec_helper' 

describe HomeController do 
    render_views 

describe "GET 'index'" do 
    it "should be successful" do 
    get 'index' 
    response.should be_success 
    end 
end 

end 

私は私のローカルホスト(開発マシン)上でWEBrickにを起動すると、私のホームページがブラウザで正常に動作します。最初に私のHomeControllerでRspecを実行すると、インデックスアクションがホームページに対応しています。テストに合格します。

Rspecが実行された後、以前にテキストデータが格納されていたデータベースフィールドがゼロになったため、Webrickでページが壊れます。後続のRspec反復も中断します。

したがって、私の開発データベースを使用してWebrickを停止し、テストデータベースの使用を開始する理由は何ですか? spec_helper.rbのENV["RAILS_ENV"] ||= 'test'行ですか?

(ここでは私のspec_helper.rbと消毒database.ymlのです:)

spec_helper.rb(私は先割れスプーンとオートテストがインストールされているが、私はあまりにもそれらを実行しているわけではないとき、このエラーが発生します。)

require 'rubygems' 
require 'spork' 
#uncomment the following line to use spork with the debugger 
#require 'spork/ext/ruby-debug' 

Spork.prefork do 
    # Loading more in this block will cause your tests to run faster. However, 
    # if you change any configuration or code from libraries loaded here, you'll 
    # need to restart spork for it take effect. 
# This file is copied to ~/spec when you run 'ruby script/generate rspec' 
# from the project root directory. 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
# require 'capybara/rspec' 

# Requires supporting files with custom matchers and macros, etc, 
# in ./support/ and its subdirectories. 
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f} 

#require 'factories' 

RSpec.configure do |config| 
    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    config.mock_with :rspec 

    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    #config.include Devise::TestHelpers, :type => :controller 
    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, comment the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 
end 

@configuration ||= AppConfiguration.find_or_create_by_name("Default configuration") 

PAYMENT_STATES = Payment.state_machine.states.keys unless defined? PAYMENT_STATES 
SHIPMENT_STATES = Shipment.state_machine.states.keys unless defined? SHIPMENT_STATES 
ORDER_STATES = Order.state_machine.states.keys unless defined? ORDER_STATES 

# Usage: 
# 
# context "factory" do 
# it { should have_valid_factory(:address) } 
# end 
RSpec::Matchers.define :have_valid_factory do |factory_name| 
    match do |model| 
    Factory(factory_name).new_record?.should be_false 
    end 
end 
end 

Spork.each_run do 
    # This code will be run each time you run your specs. 
end 

database.ymlの

+0

私はWebrickを再起動した後に、プロセス全体が再び始まると付け加えておきます。 Webrickは欠けているデータベースフィールドを見つけます(恐らくまだ開発データベースにあります)。そして、Rspecは1回の反復でも同様です。 –

+0

私はWEbrickの代わりにUnicornを使用しましたが、同じエラーを再生しました(ただし、Rspecを2度実行する必要がありましたが)。 –

+0

もRuby 1.9.2の問題です。 ENV ["RAILS_ENV"] || = 'test''をコメントアウトすると、Rspecは引き続き問題を解決しますが、正しい答えにはなりません! 'ENV [" RAILS_ENV "] = 'test''とすると、問題は残っています。 –

答えて

0

は、これはデータベースとキャッシュに保存された好みの問題、とされなかったことが判明します。

ジョシュ・ジェイコブスがそれに答える(そして、それは非常によく説明)here

ソリューションは、テストや開発のためのさまざまなキャッシュストアを設定することです。 test.rbではconfig.cache_store =:memory_storeを追加し、sporkを再起動して、すべて動作します。

関連する問題