lib/rectify/rspec/matchers.rb
require "rspec/expectations"
RSpec::Matchers.define :make_database_queries_of do |expected|
supports_block_expectations
queries = []
match do |proc|
ActiveSupport::Notifications
.subscribe("sql.active_record") do |_, _, _, _, query|
sql = query[:sql]
unless Rectify::RSpec::DatabaseReporter::SQL_TO_IGNORE.match(sql)
queries << sql
end
end
proc.call
queries.size == expected
end
failure_message do |_|
all_queries = queries.join("\n")
"expected the number of queries to be #{expected} " \
"but there were #{queries.size}.\n\n" \
"Here are the queries that were made:\n\n#{all_queries}"
end
end