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
# 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.