【RSpec】ActionMailer+ActiveJobのテストを書く
メール送信機能は処理時間が長いので遅延処理にしてる場合が多いと思うのですが、遅延処理のテストってどうやって書くねん!って思って苦労したので書き留めておきます。フィーチャテスト(Integration test)のスペックを書く想定です。
めっちゃいろいろ方法探したけどここでいけた...。
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
の一覧が。
enqueされたjobをごにょごにょするのはこのあたりのメソッドかな。
rails/test_helper.rb at b081edaf20fd828b5246239bcaaec35802558f21 · rails/rails · GitHub
rails/test_helper.rb at 3f866cbdabaa2f85c5aef754aa9a3127c99fba20 · rails/rails · GitHub