Rails 6 に更新するとメール送信のテストに失敗した


Rails で作成しているサンプルアプリケーションを Rails6 に更新したところ、メール送信の RSpec テストが失敗しました。

発生したこと

以下のような RSpec のシステムテストがありました。

scanario 'メール送信' do
  # メール送信する操作を実行

  mail = ActionMailer::Base.deliveries.last

  aggregate_failures do
    expect(mail.to).to eq ["[email protected]"]
    ...
  end
end

元々、Rails のバージョンは 5.2.3 でしたが、6.0.0 に更新してテストを実行すると以下のようなエラーになりました。

 Failure/Error: expect(mail.to).to eq ["[email protected]"]

 NoMethodError:
   undefined method `to' for nil:NilClass

ActionMailer::Base.deliveries が空のため、送信したメールが取得できずエラーになったようです。
開発環境で動作確認すると、メール送信処理自体は特に問題ないように見えます。

解決方法

テストに以下の設定を追加しました。

  ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = true
  ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true

これで、ActionMailer::Base.deliveries に送信したメールが格納されるようになりました。

参考にしたページ