instance method
assert_queries_match
Ruby on Rails edge
Since v7.2.4Signature
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 }
```
: [R] (String | Regexp, ?count: Integer?, ?include_schema: bool) { () -> R } -> R
Parameters
-
matchreq -
countkey = nil -
include_schemakey = false -
blockblock
Source
# File activerecord/lib/active_record/testing/query_assertions.rb, line 80
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} matching queries were executed#{queries.empty? ? '' : ". Queries:\n\n#{queries.join("\n\n")}"}"
else
assert_operator matched_queries.size, :>=, 1, "1 or more matching queries expected, but none were executed#{queries.empty? ? '' : ". Queries:\n\n#{queries.join("\n\n")}"}"
end
result
end
end
Defined in activerecord/lib/active_record/testing/query_assertions.rb line 80
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::Assertions::QueryAssertions