Кэширование действий 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/requests
describe '..' type: :request
), но те же тесты не пройдены, если я все запускаю rspec spec
,
Если у вас случайный тестовый порядок spec_helper.rb, установленный на true, это имеет смысл, поскольку вы не отменяете настройку "ActionController::Base.perform_caching = false".
Рекомендованный способ написания тестов кэширования состоит в том, чтобы делать до (: каждый) и после (: каждый), устанавливая и отключая параметры кэширования.
Поскольку вы тестируете эти настройки, если вы включаете их, не забудьте отключить их до конца теста, и наоборот. Ваши тесты будут более атомарными.