Skip to content

Commit ff5935d

Browse files
committed
Introduce assert_sql test helper
1 parent 51d8f8e commit ff5935d

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

test/test_helper.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,40 @@ def assert_logged(message)
108108
end
109109
end
110110

111+
module ActiveRecordHelpers
112+
def assert_sql(*patterns_to_match, &block)
113+
captured_queries = []
114+
assert_nothing_raised do
115+
ActiveSupport::Notifications.subscribed(
116+
->(_name, _start_time, _end_time, _subscriber_id, payload) { captured_queries << payload[:sql] },
117+
"sql.active_record",
118+
&block
119+
)
120+
end
121+
122+
failed_patterns = []
123+
patterns_to_match.each do |pattern|
124+
failed_check = captured_queries.none? do |sql|
125+
case pattern
126+
when Regexp
127+
sql.match?(pattern)
128+
when String
129+
sql == pattern
130+
else
131+
raise ArgumentError, "#assert_sql encountered an unknown matcher #{pattern.inspect}"
132+
end
133+
end
134+
failed_patterns << pattern if failed_check
135+
end
136+
queries = captured_queries.empty? ? "" : "\nQueries:\n #{captured_queries.join("\n ")}"
137+
assert_predicate(
138+
failed_patterns,
139+
:empty?,
140+
"Query pattern(s) #{failed_patterns.map(&:inspect).join(", ")} not found.#{queries}",
141+
)
142+
end
143+
end
144+
111145
JobIteration.logger = Logger.new(IO::NULL)
112146
ActiveJob::Base.logger = Logger.new(IO::NULL)
113147

0 commit comments

Comments
 (0)