4

我有一个规范,可以在禁用缓存和启用缓存时测试动作缓存。似乎测试执行的顺序会影响它们是否通过。

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 在最后一个期望中不存在。我很难理解为什么无缓存测试会影响缓存测试。有谁知道出了什么问题?

4

2 回答 2

1

如果您将 spec_helper.rb 随机测试顺序设置为 true,这是有道理的,因为您没有取消“ActionController::Base.perform_caching = false”设置。

编写缓存测试的推荐方法是执行 before(:each) 和 after(:each) 设置缓存设置的开和关。

由于您正在测试这些设置,如果您将其打开,请记住在测试结束之前将其关闭,反之亦然。您的测试将更加原子化。

于 2013-04-02T02:27:24.153 回答
0

确保您拥有:

config.action_controller.perform_caching = true

environment/test.rb.

否则 - 我注意到超级奇怪的事情。当我只运行请求测试 () 时缓存有效spring rspec spec/requests describe '..' type: :request,但如果我使用rspec spec.

于 2017-08-30T22:19:22.767 回答