2016-04-18 13 views
1

異なる目的でデフォルトのtestを使用しており、テストスイートを実行するために特定のrspec環境設定を行うことに決めました。Rspec - テスト環境の追加設定はどこですか?

はしかし、私は私の質問がある(uninitialized constantエラーを投げるなど、FactoryGirl、DatabaseCleaner)突然、物事の多くは間違っている、私のrails_helper.rbファイルにENV["RAILS_ENV"] ||= rspecに変更すると、定数がロードされていないこと

を発見しました、テスト環境でそれらの人をロードするコードはどこですか?私は自動テストを実行する以外の目的でこのステージを使用することを計画しているので、私はこれが "どこにもありません"という設定を追加しても、私がしようとしているものとうまく機能しないかもしれません。

答えて

1

FactoryGirl、DatabaseCleanerなどでuninitialized constantのエラーが発生した場合は、Gemfiletestグループに含まれている可能性が最も高いです。

あなたは例えば、rspecグループに移動する必要があります。

# Gemfile 

group :rspec do 
    gem 'factory_girl_rails', '~> 4.0' 
    gem 'faker' 
end 
+0

Aaaah *叩いている額はもちろんです! –

1

をレールの観点からは、テスト環境を設定し、他の環境などproductiondevelopmentのようにロードされます。これは、ネイティブのRailsコマンドの多くにRAILS_ENV=testの接頭辞が付いていることを見ることができます。 RAILS_ENV=test rails cは、テスト環境用のレールコンソールなどをロードします。同様に、Rails内のすべてのテスト固有の設定はconfig/environmentsフォルダのtest.rbに定義されています。しかし

、あなたはrspec specとあなたのスペックを実行すると、あなたが実際にほとんどの意図や目的のために、独立して(でもrspec-rails宝石付き)のRailsの実行し、RSpecのランナーを、開始しています。

慣例により、RSpecが最初に起動するとき、カレントディレクトリの.rspec(存在する場合)からコマンドライン引数が読み込まれます。その後、spec_helper.rbrspec-rails 3+の場合はrails_helper.rb)も実行されます。それは実際にありますなどDatabaseCleanerFactoryGirl

としてあなたが迷っている場合は、テストで使用しているモジュールのいずれかと一緒に、あなたのテストのためのRailsの環境をロードするには、すべての重量物の持ち上げを行いspec_helper.rb、 RSpecがどのようにRailsにフックするかは、この行で実行され、Railsをブートストラップします。あなたの質問にとして、ENV['RAILS_ENV'] ||= 'test'声明なしに、上記の行は、任意の宝石以来ない:testグループの意志で、あなたが望むものではありませんこれは、デフォルトの環境(開発)でのRailsをロードします

今 ​​

、ロードされず、environments/test.rbもロードされません。 spec/spec_helper.rb(時々rails_helper.rb命名)とconfig/environments/test.rb;

TL DR

テスト構成は、二つのファイルが処理されます。前者はRSpecと、specで使用されているファイル内で特に使用されるオブジェクトとモジュールを設定します。後者はRailsアプリケーション自体を設定します。ENV['RAILS_ENV'] ||= testを省略すると、テスト環境とゲムセットの代わりに開発環境とゲームセットがロードされるため、大量のエラーが発生します。

関連する問題