如何在单元测试中检查Rails记录缓存?

时间:2011-07-21 19:09:56

标签: ruby-on-rails unit-testing caching

我正在尝试进行单元测试以确保某些操作执行/不查询数据库。有什么方法我可以查看查询,或者我可以在最糟糕的情况下检查一些计数器吗?

1 个答案:

答案 0 :(得分:2)

如果您的目的是辨别Rails(ActiveRecord)是否实际缓存查询,则不必为那些人编写单元测试 - 他们already exist并且是Rails本身的一部分。

修改

在这种情况下,我可能会看到我是否可以调整rails团队用于测试ActiveRecord本身的策略之一。从上面的链接中检查以下测试:

def test_middleware_caches
  mw = ActiveRecord::QueryCache.new lambda { |env|
    Task.find 1
    Task.find 1
    assert_equal 1, ActiveRecord::Base.connection.query_cache.length
  }
  mw.call({})
end

您可以执行以下操作:

def check_number_of_queries
  mw = ActiveRecord::QueryCache.new lambda { |env|
    # Assuming this object is set up to perform all its operations already
    MyObject.first.do_something_and_perform_side_operations
    puts ActiveRecord::Base.connection.query_cache.length.to_s
  }
end

我没有尝试过这样的事情,但可能值得进一步研究。如果上面确实返回了等待发生的缓存查询的数量,那么将puts更改为测试用例的断言应该是微不足道的。