Counting the number of queries performed

后端 未结 8 1861
[愿得一人]
[愿得一人] 2020-12-08 01:53

I\'d like to test that a certain piece of code performs as few SQL queries as possible.

ActiveRecord::TestCase seems to have its own assert_querie

8条回答
  •  醉酒成梦
    2020-12-08 02:42

    • helpful error message
    • removes subscribers after execution

    (based on Jaime Cham's answer)

    class ActiveSupport::TestCase
      def sql_queries(&block)
        queries = []
        counter = ->(*, payload) {
          queries << payload.fetch(:sql) unless ["CACHE", "SCHEMA"].include?(payload.fetch(:name))
        }
    
        ActiveSupport::Notifications.subscribed(counter, "sql.active_record", &block)
    
        queries
      end
    
      def assert_sql_queries(expected, &block)
        queries = sql_queries(&block)
        queries.count.must_equal(
          expected,
          "Expected #{expected} queries, but found #{queries.count}:\n#{queries.join("\n")}"
        )
      end
    end
    

提交回复
热议问题