2012-05-11 17 views
3

共有サンプルを変更したときにsporkにリロードする方法を教えてください。私は次のことを試してみましたが、それは彼らをリロードいない:Reload RSpec GuardとSporkの共有例

Spork.each_run do 
    Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f} 
end 

を私は共有の例が変更されたとき、それはENVをリロード持っている私のGuardfileにウォッチャを追加することができることを知っているが、私のアプリケーションは大きく、約10かかります

watch(/^spec\/shared_examples\/.*\.rb$/) 

もっと速いフィードバックループができるように変更された共有サンプルをリロードすることをお勧めします。環境設定ファイルtest.rb

、あなたはあなたがキャッシュしていないになり、この

config.cache_classes = !(ENV['DRB'] == 'true') 

を持っていることを確認してください。ここでは

答えて

3

私はでもでSpork.preforkのshared_examplesをロードしていて、何らかの理由で実行ごとにリロードしない原因となっていました。 Spork.preforkからその行を削除してSpork.each_runにだけ置くと、問題が修正され、shared_examplesへの変更はテストが実行されるたびに反映されます。

+0

'prefork'ブロックで共有された例を**ロードしない**どうしますか? 'Dir [Rails.root.join(" spec/support/**/*。rb ")]があります。each {| f |私たちの 'prefork'ブロックにはf}'が必要です。すべてのもの(共有の例を含む)は確実に読み込まれます。あなたは共有された例が 'prefork'ブロックに読み込まれないようにするにはどうしたらいいですか? –

+1

ああ、わかりました:私たちは 'spec/support/shared_examples'の下で共有サンプルを持っていました。あなたは' spec/shared_examples'の下にあります。それらを 'spec/shared_examples'に動かすのですが、これは共有された例がどこに属しているのでしょうか? 'support'フォルダーから移動したくない場合、' prefork'ブロックにロードされないようにするにはどうしたらいいですか? –

+1

したがって、 'prefork'でこのコード行を使用すると、共有された例はロードされません:' Dir [Rails.root.join( "spec/support/**/*。rb")]。 f [%r {/ shared_examples /}]} .each {| f | f} 'が必要です。 –

0
Spork.prefork do 
    Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f} 
end 
+0

環境がロードされているときにプリフォークが1回だけ実行されますか? –

+0

そうですが、あなたはそれらのファイルを見るように言っています;) – thiagofm

+1

私はフォローしていません。実際には、私がガードを使用しているものです。 –

8

あなたがチェックする必要がありますカップルの事がありますあなたがSpork環境にいる場合は、

すると、中には、これらは必ずリロードしているクラスの各実行をしなければならない.each_run

FactoryGirl.reload 
ActiveSupport::Dependencies.clear 
ActiveRecord::Base.instantiate_observers 

これであることを確認してください。

また、share_examplesの負荷を.each_runセクションに保存します。

Spork.each_run do 
    FactoryGirl.reload 
    ActiveSupport::Dependencies.clear 
    ActiveRecord::Base.instantiate_observers 
    Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f} 
end 

あなたは、すべての負荷を正しく確認物事を作るために.each_runセクションの4行の順番でプレイする必要があるかもしれません。

+0

コメントありがとうございます。私はそれを正しくやっていることが判明しましたが、私は愚かにpreforkとeach_runの両方で共有の例を必要としていました。何らかの理由で何らかの矛盾が生じていて、実行ごとに読み込まれていなかった。 –

+0

うれしい私は助けることができます。私の答えが役立ち、正確であると思ったなら、私はアップボートに感謝します。がんばろう! –

関連する問題