8000 GitHub - sds/db-query-matchers at v0.5.0
[go: up one dir, main page]

Skip to content

sds/db-query-matchers

Repository files navigation

db-query-matchers

Gem Version Build Status Code Climate Dependency Status

RSpec matchers for database queries.

Installation

Add this line to your application's Gemfile, preferably in your test group:

gem 'db-query-matchers'

And then execute:

bundle

Or install it yourself as:

gem install db-query-matchers

Usage

describe 'MyCode' do
  context 'when we expect no queries' do
    it 'does not make database queries' do
      expect { subject.make_no_queries }.to_not make_database_queries
    end
  end

  context 'when we expect queries' do
    it 'makes database queries' do
      expect { subject.make_some_queries }.to make_database_queries
    end
  end

  context 'when we expect exactly 1 query' do
    it 'makes database queries' do
      expect { subject.make_one_query }.to make_database_queries(count: 1)
    end
  end

  context 'when we expect max 3 queries' do
    it 'makes database queries' do
      expect { subject.make_several_queries }.to make_database_queries(count: 0..3)
    end
  end

  context 'when we expect a possible range of queries' do
    it 'makes database queries' do
      expect { subject.make_several_queries }.to make_database_queries(count: 3..5)
    end
  end

  context 'when we only care about manipulative queries (INSERT, UPDATE, DELETE)' do
    it 'makes a destructive database query' do
      expect { subject.make_one_query }.to make_database_queries(manipulative: true)
    end
  end

  context 'when we only care about queries matching a certain pattern' do
    it 'makes a destructive database query' do
      expect { subject.make_special_queries }.to make_database_queries(matching: 'DELETE * FROM')
    end

    it 'makes a destructive database query matched with a regexp' do
      expect { subject.make_special_queries }.to make_database_queries(matching: /DELETE/)
    end
  end
end

Configuration

To exclude certain types of queries from being counted, specify an ignores configuration consisting of an array of regular expressions. If a query matches one of the patterns in this array, it will not be counted in the make_database_queries matcher.

To exclude SCHEMA queries, add schemaless to the configuration. This will help avoid failing specs due to ActiveRecord load order.

DBQueryMatchers.configure do |config|
  config.ignores = [/SHOW TABLES LIKE/]
  config.schemaless = true

  # the payload argument is described here:
  # http://edgeguides.rubyonrails.org/active_support_instrumentation.html#sql-active-record
  config.on_query_counted do |payload|
    # do something arbitrary with the query
  end
end

About

RSpec matchers for database queries

Topics

Resources

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 23

Languages

0