尽管ActionController :: Base.perform_caching = false,Rails.cache.fetch正在提供/获取缓存

时间:2015-06-05 14:12:37

标签: ruby-on-rails caching

我想测试我的缓存行为,并且这些行中的某些内容失败了:

  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

1 个答案:

答案 0 :(得分:1)

事实上,ActionController::Base.perform_caching及其对应config.action_controller.perform_caching旨在控制低级别缓存。

我提交了issue+PR来更改可能非常misleading的文档。