RSpec for Sidekiq RubyGems Code Climate Travis CI Gemnasium

Simple testing of Sidekiq jobs via a collection of matchers and common tasks

RubyGems | Code Climate | GitHub | Travis CI | Gemnasium | RubyDoc | Ruby Toolbox

Installation

gem "rspec-sidekiq"

There is no need to require "sidekiq/testing" when using rspec-sidekiq

Configuration

If you wish to modify the default behaviour, add the following to your spec_helper.rb file

RSpec::Sidekiq.configure do |config|
  # Clears all job queues before each example
  config.clear_all_enqueued_jobs = false # default => true
end

Matchers

be_processed_in

Describes the queue that the job should be processed in

it { should be_processed_in :download } } # one liner
expect(AwesomeJob).to be_processed_in :download # new expect syntax

be_retryable

Describes if the job retries when there is a failure in it's execution

it { should be_retryable true } } # one liner
expect(AwesomeJob).to be_retryable true # new expect syntax
# ...or alternatively specifiy the number of times it should be retried
it { should be_retryable 5 } } # one liner
expect(AwesomeJob).to be_retryable 5 # new expect syntax

be_unique

Describes if the job should be unique within it's queue

sidekiq_options unique: true # job option

it { should be_unique } } # one liner
expect(AwesomeJob).to be_unique # new expect syntax

have_enqueued_job

Evaluates that there is an enqueued job with the specified arguments

expect(AwesomeJob).to have_enqueued_job("Awesome", true) # new expect syntax

have_enqueued_jobs

Evaluates the number of enqueued jobs for a specified job class

expect(AwesomeJob).to have_enqueued_jobs(1) # new expect syntax
# ...but you could just use
expect(AwesomeJob).to have(1).jobs
# ...or even
expect(AwesomeJob).to have(1).enqueued.jobs

Example

require "spec_helper"

describe AwesomeJob do
  it { should be_processed_in :download }
  it { should be_retryable false }
  it { should be_unique }

  it "enqueues another awesome job" do
    subject.perform

    expect(AnotherAwesomeJob).to have_enqueued_job("Awesome", true)
  end
end

Testing

bundle exec rspec spec

Contribute

Yes do it! If there's a feature missing that you'd love them get in on the action!

Issues/Pull Requests/Comments bring them on...