开发者

How can I check Rails record caching in unit tests?

开发者 https://www.devze.com 2023-03-22 14:56 出处:网络
I\'m trying to make a unit test to ensure that certain operations do / do not query the database.Is there some way I can watch for queries, or some counter I can check at the very worst开发者_开发百科

I'm trying to make a unit test to ensure that certain operations do / do not query the database. Is there some way I can watch for queries, or some counter I can check at the very worst开发者_开发百科?


If your intent is to discern whether or not Rails (ActiveRecord) actually caches queries, you don't have to write a unit test for those - they already exist and are part of Rails itself.

Edit:

In that case, I would probably see if I could adapt one of the strategies the rails team uses to test ActiveRecord itself. Check the following test from my link above:

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

You may be able to do something like the following:

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

I haven't tried such a thing, but it might be worth investigating further. If the above actually does return the number of cached queries waiting to happen, it should be trivial to change the puts to an assert for your test case.

0

精彩评论

暂无评论...
验证码 换一张
取 消