Skip to content

Instantly share code, notes, and snippets.

@pheisiph
Forked from ChuckJHardy/example_activejob.rb
Created May 12, 2016 12:02
Show Gist options
  • Save pheisiph/3b8c73a934cf9163ab9e25b4d98f3c2f to your computer and use it in GitHub Desktop.
Save pheisiph/3b8c73a934cf9163ab9e25b4d98f3c2f to your computer and use it in GitHub Desktop.
Example ActiveJob with RSpec Tests
class MyJob < ActiveJob::Base
queue_as :urgent
rescue_from(NoResultsError) do
retry_job wait: 5.minutes, queue: :default
end
def perform(*args)
MyService.call(*args)
end
end
require 'rails_helper'
RSpec.describe MyJob, type: :job do
include ActiveJob::TestHelper
subject(:job) { described_class.perform_later(123) }
it 'queues the job' do
expect { job }
.to change(ActiveJob::Base.queue_adapter.enqueued_jobs, :size).by(1)
end
it 'is in urgent queue' do
expect(MyJob.new.queue_name).to eq('urgent')
end
it 'executes perform' do
expect(MyService).to receive(:call).with(123)
perform_enqueued_jobs { job }
end
it 'handles no results error' do
allow(MyService).to receive(:call).and_raise(NoResultsError)
perform_enqueued_jobs do
expect_any_instance_of(MyJob)
.to receive(:retry_job).with(wait: 10.minutes, queue: :default)
job
end
end
after do
clear_enqueued_jobs
clear_performed_jobs
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment