我有一个规范,在禁用缓存和启用缓存时测试操作缓存。看起来测试执行的顺序会影响它们是否通过。
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在最后一次期望中不存在。我很难理解为什么没有缓存测试会影响缓存测试。有谁知道出了什么问题?
答案 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)
运行所有内容,则相同的测试失败。