我想测试我的缓存行为,并且这些行中的某些内容失败了:
context "without cache" do
it "should return the appropriate result, computing it every time", :caching => false do
p ActionController::Base.perform_caching
Object.should_receive(:where).exactly(4).and_call_original
result1 = SomeService.action(args1, args2)
result2 = SomeService.action(args1, args2)
end
end
...即使为false
打印出ActionController::Base.perform_caching
。 [这被bloc的:caching => false
选项禁用(我使用钩子)]
如果我通过从测试环境的默认:memory_store
切换到:null_store
来完全关闭缓存,则测试会按预期传递。我只是在test.rb
中添加这一行:
config.cache_store = :null_store
我的action
方法使用Rails的核心缓存:
def action(args1, args2):
...
objects = Rails.cache.fetch(cache_key, expires_in: 5.days) do
object.where(id: args1).where(charac: args2).includes(...).to_a
end
...
end
答案 0 :(得分:1)
事实上,ActionController::Base.perform_caching
及其对应config.action_controller.perform_caching
旨在控制低级别缓存。
我提交了issue+PR来更改可能非常misleading的文档。