web-dev-qa-db-ja.com

Rails.cacheはテスト間でパージされますか?

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
42
mrzasa

追加:

before(:all) do
  Rails.cache.clear
end

各スペックファイルを実行する前にキャッシュをクリアします。

追加:

before(:each) do
  Rails.cache.clear
end

各仕様の前にキャッシュをクリアします。

これをspec/spec_helper.rbブロック内のRSpec.configureブロック内に配置して、グローバルに適用することができます(specファイルまたはケースごとに分散させることをお勧めします)。

デフォルトでは、RSpecはそのキャッシュを自動的にクリアしません。

41
mrzasa

より効率的(かつ簡単)な方法は、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 も参照してください。

66
jaustin