我正在尝试进行单元测试以确保某些操作执行/不查询数据库。有什么方法我可以查看查询,或者我可以在最糟糕的情况下检查一些计数器吗?
答案 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更改为测试用例的断言应该是微不足道的。