Rails.cache очищается между тестами?
Мы кэшируем отображение id/path с помощью Rails.cache
в приложении Rails 3.2. На некоторых машинах он работает нормально, но на других значениях неверны. Причина трудно отслеживать, поэтому у меня есть некоторые вопросы о самом 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
Ответы
Ответ 1
Добавить
before(:all) do
Rails.cache.clear
end
чтобы очистить кеш до запуска каждого файла спецификации.
Добавить
before(:each) do
Rails.cache.clear
end
чтобы очистить кеш до каждой спецификации.
Вы можете поместить это внутри spec/spec_helper.rb
в блок RSpec.configure
, чтобы он применялся глобально (рекомендуется для рассеяния на файл спецификации или случай).
RSpec по умолчанию не очищает этот кеш автоматически.
Ответ 2
Более эффективным (и более простым) способом является установка кеша тестовой среды для использования NullStore:
# config/environments/test.rb:
config.cache_store = :null_store
NullStore гарантирует, что ничто никогда не будет кэшироваться.
Например, в приведенном ниже коде он всегда попадает в блок и возвращает текущее время:
Rails.cache.fetch('time') { Time.now }
Также см. руководство по кэшированию Rails: http://guides.rubyonrails.org/caching_with_rails.html#activesupport-cache-nullstore