3

共有された例に変更を加えたときに spork に再読み込みさせるにはどうすればよいですか? 私は以下を試しましたが、それらをリロードしていません:

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

Guardfile にウォッチャーを追加して、共有の例が変更されたときに env をリロードできることはわかっていますが、私のアプリケーションは大きく、環境全体をリロードするのに約 10 ~ 15 秒かかります。

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

ただし、変更された共有の例をリロードして、フィードバックループを高速化できるようにすることをお勧めします。

4

3 に答える 3

8

確認する必要があるいくつかの点を次に示します。

環境設定ファイルtest.rbで、これがあることを確認してください

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

これにより、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 行の順序をいじる必要があるかもしれません。

于 2012-05-11T16:27:12.097 に答える
3

Spork.prefork で shared_examples読み込んでいたことが判明しましたが、何らかの理由で、実行ごとにそれらがリロードされませんでした。その行を Spork.prefork から削除し、Spork.each_run にのみ含めることで問題が修正され、テストが実行されるたびにすべての shared_examples への変更が反映されるようになりました。

于 2012-05-14T00:23:41.203 に答える
0
Spork.prefork do
  Dir[Rails.root.join("spec/shared_examples/*.rb")].each {|f| require f}
end
于 2012-05-11T16:23:09.107 に答える