0

RSpecで何年もの間、Sporkの実行の間にモデルがリロードされないという問題がありました。

私は最終的に次の行を変更することでこれを修正しましたconfig/environments/test.rb

config.cache_classes = true

なりました

config.cache_classes = false

ただし、これによりRSpecの問題は解決されましたが、Cucumberではcache_classesがtrueに設定されている必要があります。 https://rspec.lighthouseapp.com/projects/16211/tickets/165

RSpecとCucumberの両方で機能し、RSpecモデルを正常にリロードする標準的なソリューションはありますか?

脚注

* RSpecリロードモデルを作成するために実装したその他の変更には、次の行の追加が含まれますspec_helper.rb

ActiveSupport::Dependencies.clear
FactoryGirl.reload

これらの行はいずれも、行を設定せずに問題を解決しませんでしたcache_classes=true

4

1 に答える 1

2

私はこの問題を抱えていました、そして私にとってそれはRailsのスレッドセーフモードが原因でした。config.threadsafeを保証します!私のテスト環境では呼び出されませんが、修正されました。これは、スレッドセーフモードでは、リクエストごとにコードが再読み込みされないようにし、依存関係の自動読み込みを無効にするためです。これは、sporkがeach_runで依存していたと思います。

私はconfig.threadsafeを呼んでいました!application.rbにあるので、そこからその呼び出しを削除し、代わりにdevelopment.rbとproduction.rbに配置しました。これで、config.cache_classesをtrueに設定したままにしておくことができ、rspecとcucumberはsporkの下で問題なく動作します。パーシスタンスレイヤーでMongoidを使用し、FactoryGirlの代わりにMachinistを使用していたことに注意してください。

http://rickyrobinson.id.au/2012/07/20/when-spork-puts-a-fork-in-your-cucumber-and-a-spanner-in-your-specsも参照してください。

于 2012-07-20T03:49:02.350 に答える