sql_matchers

Use sql_matchers
for query assertions and SQL matchers for RSpec.
This gem was extracted from Keygen.
Sponsored by:
A fair source software licensing and distribution API.
Installation
Add this line to your application's Gemfile
:
gem 'sql_matchers'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sql_matchers
Usage
it 'should assert query count' do
expect { User.find_by(id: 1) }.to match_query(count: 1)
end
it 'should assert query matches' do
expect { 3.times { User.find_by(id: _1 + 1) } }.to(
match_queries(count: 3) do |queries|
first, second, third, *rest = queries
expect(first).to eq %(SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1)
expect(second).to eq %(SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1)
expect(third).to eq %(SELECT "users".* FROM "users" WHERE "users"."id" = 3 LIMIT 1)
expect(rest).to be_empty
end
)
end
it 'should assert SQL matches' do
expect(User.where(id: 42).to_sql).to match_sql <<~SQL.squish
SELECT
users.*
FROM
users
WHERE
users.id = 42
SQL
end
Future
Right now, the gem only supports RSpec, but we're open to pull requests that
extend the functionality to other testing frameworks.
Supported Rubies
sql_matchers
supports Ruby 3.1 and above. We encourage you to upgrade
if you're on an older version. Ruby 3 provides a lot of great features, like
better pattern matching and a new shorthand hash syntax.
Is it any good?
Yes.
Contributing
If you have an idea, or have discovered a bug, please open an issue or create a
pull request.
License
The gem is available as open source under the terms of the MIT License.