Я уже писал как-то, что при тестировании rails-приложений, нужно очень внимательно следить за кэшем.
Опция config.perform_caching = false
работает только для caches_action
в контроллерах и cache
в шаблонах.
Любые обращения к Rails.cache
продолжают работать, потому что по умолчанию там живет AS::C::MemoryStore
1.
Конечно мы можем в #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↩