【RSpec】ActionMailer+ActiveJobのテストを書く

メール送信機能は処理時間が長いので遅延処理にしてる場合が多いと思うのですが、遅延処理のテストってどうやって書くねん!って思って苦労したので書き留めておきます。フィーチャテスト(Integration test)のスペックを書く想定です。

めっちゃいろいろ方法探したけどここでいけた...。

chriswarren.github.io

ActiveJob::TestHelperをincludeして、

include ActiveJob::TestHelper 

以下みたいにすればおっけー。

perform_enqueued_jobs do 
  expect do
    perform_enqueued_jobs { click_link "登録する" }
  end.to change { ActionMailer::Base.deliveries.size }.by(1)
end 

ブロックの中で、ジョブが突っ込まれる処理をいれればいいのね...。

ここにTestHelpers#methodsの一覧が。

ActiveJob::TestHelper

enqueされたjobをごにょごにょするのはこのあたりのメソッドかな。

rails/test_helper.rb at b081edaf20fd828b5246239bcaaec35802558f21 · rails/rails · GitHub

rails/test_helper.rb at 3f866cbdabaa2f85c5aef754aa9a3127c99fba20 · rails/rails · GitHub