Я уже писал как-то, что при тестировании rails-приложений, нужно очень внимательно следить за кэшем.
Опция config.perform_caching = false работает только для caches_action в контроллерах и cache в шаблонах.
Любые обращения к Rails.cache продолжают работать, потому что по умолчанию там живет AS::C::MemoryStore1.
Конечно мы можем в #setup (TestUnit) или в #before(:each) (RSpec) каждый раз вызывать Rails.cache.clear.
Но согласитесь, далеко не в каждом тесте это нужно, а гадать, где используется кэш, а где нет — это неудобно.
Похожая проблема возникает не только в тестах, но и в режиме разработки. Вы изменяете код, но в кэш уже записаны данные старым кодом и нужно производить разные нетривиальные действия, чтобы кэш сбросить.
Специально, чтобы можно было легко отключать кэш в окружениях development и test, я сделал гем dummy-cache. Работает только для rails >= 3.0 (если точнее, то для activesupport >= 3.0).
Добавляем гем в Gemfile:
gem "dummy-cache"
И прописываем в config/environments/development.rb или config/environments/test.rb:
...
config.cache_store = :dummy_store
...
И можете быть уверенны, что Rails.cache больше ничего кэшировать не будет.
-
ActiveSupport::Cache::MemoryStore↩