instance method assert_queries_match

Ruby on Rails 8.0.4

Since v7.2.3

Available in: v7.2.3 v8.0.4 v8.1.2

Signature

assert_queries_match(match, count: nil, include_schema: false, &block)

Asserts that the SQL queries executed in the given block match expected pattern.

# Check for exact number of queries
assert_queries_match(/LIMIT \?/, count: 1) { Post.first }

# Check for any number of queries
assert_queries_match(/LIMIT \?/) { Post.first }

If the :include_schema option is provided, any queries (including schema related) that match the matcher are considered.

assert_queries_match(/FROM pg_attribute/i, include_schema: true) { Post.columns }

Parameters

match req
count key = nil
include_schema key = false
block block
Source
# File activerecord/lib/active_record/testing/query_assertions.rb, line 59
      def assert_queries_match(match, count: nil, include_schema: false, &block)
        ActiveRecord::Base.lease_connection.materialize_transactions

        counter = SQLCounter.new
        ActiveSupport::Notifications.subscribed(counter, "sql.active_record") do
          result = _assert_nothing_raised_or_warn("assert_queries_match", &block)
          queries = include_schema ? counter.log_all : counter.log
          matched_queries = queries.select { |query| match === query }

          if count
            assert_equal count, matched_queries.size, "#{matched_queries.size} instead of #{count} queries were executed.#{queries.empty? ? '' : "\nQueries:\n#{queries.join("\n")}"}"
          else
            assert_operator matched_queries.size, :>=, 1, "1 or more queries expected, but none were executed.#{queries.empty? ? '' : "\nQueries:\n#{queries.join("\n")}"}"
          end

          result
        end
      end

Defined in activerecord/lib/active_record/testing/query_assertions.rb line 59 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::Assertions::QueryAssertions

Type at least 2 characters to search.

↑↓ navigate · open · esc close