delay_job_active_record を使用して、Rails 4.2 にアップグレードしようとしています。ジョブがすぐに実行されるように、テスト環境用のdelayed_job バックエンドを設定していません。
RSpec で新しい「deliver_later」メソッドをテストしようとしていますが、方法がわかりません。
古いコントローラー コード:
ServiceMailer.delay.new_user(@user)
新しいコントローラー コード:
ServiceMailer.new_user(@user).deliver_later
私はそれを次のようにテストするために使用しました:
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true))
今、私はそれを使用してエラーが発生します。(二重の「メーラー」が予期しないメッセージを受け取りました:deliver_later with (引数なし))
ただ
expect(ServiceMailer).to receive(:new_user)
「nil:NilClass の undefined method `deliver_later'」でも失敗します
ActiveJob で test_helper を使用してジョブがキューに登録されているかどうかを確認できる例をいくつか試しましたが、正しいジョブがキューに登録されていることをテストできませんでした。
expect(enqueued_jobs.size).to eq(1)
これは、test_helper が含まれている場合はパスしますが、送信されている電子メールが正しいかどうかを確認することはできません。
私がやりたいことは次のとおりです。
- 正しいメールがキューに入れられていることをテストします (またはテスト環境ですぐに実行されます)
- 正しいパラメータ (@user) を使用
何か案は??ありがとう