Хорошо, так что я, в конце концов, дошел до сути.
Краткий ответ: Rails.cache
- это псевдоним для RAILS_CACHE
, и хотя нет метода Rails.cache=
, который можно назначить для RAILS_CACHE
, например:
ActionController::Base.perform_caching = true
ActionController::Base.cache_store = :memory_store
RAILS_CACHE = ActionController::Base.cache_store
Возможно, вы также можете сделать RAILS_CACHE = ActiveSupport::Cache.lookup_store(:memory_cache)
, но мне это кажется немного грязнее.
Более длинный ответ - использовать шаг, чтобы обернуть таблицу другогошаги с кодом, который включает, а затем отключает кэш, чтобы гарантировать, что вы не нарушите другие тесты, оставив кэширование включенным - эту ошибку ошибочно отслеживать.
Это будет выглядеть примерно так:
When /^I do the following steps with caching enabled:$/ do |table|
old_perform_caching = ActionController::Base.perform_caching
old_action_controller_cache = ActionController::Base.cache_store
old_rails_cache = RAILS_CACHE
ActionController::Base.perform_caching = true
ActionController::Base.cache_store = :memory_store
RAILS_CACHE = ActionController::Base.cache_store
steps table.raw.flatten.join("\n")
ActionController::Base.perform_caching = old_perform_caching
ActionController::Base.cache_store = old_action_controller_cache
RAILS_CACHE = old_rails_cache
end
И его использование будет выглядеть примерно так:
When I do the following steps with caching enabled:
| When I run "rake cron:nightly" |
| Then the cache for "x" should return "6" |
| And the cache for "y" should return "13" |
| And the cache for "z" should return "800" |
Шаги в таблице, очевидно, были реализованы в другом месте.