I’m sharing this because it was really not obvious what’s happening with tests that verify emails when using the new ActiveJob interface.
Basically, if you set the following in your test.rb, then sidekiq does not come into play, at all.
config.active_job.queue_adapter = :test
Next, ActiveJob does not process emails when the emails are to be sent as a result of Capybara integration tests.
The fix is to create a file in spec/support/perform_enqueued.rb with the following (or add to your rails_helper.rb):
# From http://stackoverflow.com/a/29967430/1009332
RSpec.configure do |config|
config.before :example, perform_enqueued: true do
@old_perform_enqueued_jobs = ActiveJob::Base.queue_adapter.perform_enqueued_jobs
@old_perform_enqueued_at_jobs = ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = true
end
config.after :example, perform_enqueued: true do
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = @old_perform_enqueued_jobs
ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = @old_perform_enqueued_at_jobs
end
end
I had to add this to all integration tests depending on the processing of jobs, including sending of emails.