Rails 3.2アプリでRails.cache
を使用してID /パスマッピングをキャッシュします。一部のマシンでは正常に動作しますが、他のマシンでは値が間違っています。原因を追跡するのは難しいため、 Rails.cache
自体についていくつか質問がありますテスト間でパージされますか?開発モードでキャッシュされた値がテストモードで使用される可能性はありますか?パージされない場合、仕様を実行する前にどうすればよいですか?
私のキャッシュストアの構成は次のとおりです。
#in: config/environments/development.rb
config.cache_store = :memory_store, {:size => 64.megabytes}
#in: config/environments/production.rb
# config.cache_store = :mem_cache_store
追加:
before(:all) do
Rails.cache.clear
end
各スペックファイルを実行する前にキャッシュをクリアします。
追加:
before(:each) do
Rails.cache.clear
end
各仕様の前にキャッシュをクリアします。
これをspec/spec_helper.rb
ブロック内のRSpec.configure
ブロック内に配置して、グローバルに適用することができます(specファイルまたはケースごとに分散させることをお勧めします)。
デフォルトでは、RSpecはそのキャッシュを自動的にクリアしません。
より効率的(かつ簡単)な方法は、NullStoreを使用するようにテスト環境のキャッシュを設定することです。
# config/environments/test.rb:
config.cache_store = :null_store
NullStoreは、何もキャッシュされないようにします。
たとえば、以下のコードでは、常にブロックに到達し、現在の時刻を返します。
Rails.cache.fetch('time') { Time.now }
Rails Caching guide: http://guides.rubyonrails.org/caching_with_Rails.html#activesupport-cache-nullstore も参照してください。