Кэширование действий Rails Тест RSpec не удался

У меня есть спецификация, которая проверяет кэширование действий, когда кэширование отключено и когда включено кэширование. Похоже, порядок выполнения тестов влияет на то, пройдены они или нет.

it "should not cache the index page when we're not caching" do
    ActionController::Base.perform_caching = false
    HomeController.caches_action :index
    Rails.cache.clear
    ActionController::Base.cache_store.exist?(:index_cache_path).should be_false
    get :index
    ActionController::Base.cache_store.exist?(:index_cache_path).should be_false
end

it "should cache the index page when we're caching" do
    ActionController::Base.perform_caching = true
    HomeController.caches_action :index
    Rails.cache.clear
    ActionController::Base.cache_store.exist?(:index_cache_path).should be_false
    get :index
    ActionController::Base.cache_store.exist?(:index_cache_path).should be_true
end

Когда тесты выполняются в указанном выше порядке, последний тест не пройден, поскольку cache_store не существует в последнем ожидании. Я озадачен тем, почему тест без кэширования влияет на тест кэширования. Кто-нибудь знает, что не так?

2 ответа

Убедитесь, что у вас есть:

config.action_controller.perform_caching = true

В environment/test.rb,

Еще - я заметил супер странную вещь. Кеширование работало, когда я запускаю только тесты запросов (spring rspec spec/requestsdescribe '..' type: :request), но те же тесты не пройдены, если я все запускаю rspec spec,

Если у вас случайный тестовый порядок spec_helper.rb, установленный на true, это имеет смысл, поскольку вы не отменяете настройку "ActionController::Base.perform_caching = false".

Рекомендованный способ написания тестов кэширования состоит в том, чтобы делать до (: каждый) и после (: каждый), устанавливая и отключая параметры кэширования.

Поскольку вы тестируете эти настройки, если вы включаете их, не забудьте отключить их до конца теста, и наоборот. Ваши тесты будут более атомарными.

Другие вопросы по тегам