Подтвердить что ты не робот

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
4b9b3361

Ответ 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