Rails操作缓存RSpec测试失败

时间:2013-01-22 21:59:22

标签: ruby-on-rails rspec action-caching

我有一个规范,在禁用缓存和启用缓存时测试操作缓存。看起来测试执行的顺序会影响它们是否通过。

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 个答案:

答案 0 :(得分:0)

如果你有spec_helper.rb随机测试顺序变为true,那么这是有意义的,因为你没有取消你的“ActionController :: Base.perform_caching = false”设置。

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

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

答案 1 :(得分:0)

确保您拥有:

environment/test.rb

spring rspec spec/requests

否则 - 我注意到了超级奇怪的事情。当我仅运行请求测试(describe '..' type: :request rspec spec)时,缓存工作正常,但如果我使用select Round((DATEDIFF(mm, '01/01/2016', '07/1/2017') + CASE WHEN abs(DATEPART(day, '01/01/2016') - DATEPART(day, '06/30/2017')) > 15 THEN 1 ELSE 0 END) / 12.0, 0) 运行所有内容,则相同的测试失败。