[解決済み] ActionMailerのdeliver_laterをrspecでテストする方法
2023-05-26 19:49:19
質問
Rails 4.2にアップグレードしようとしているのですが、delayed_job_active_recordを使用しています。テスト環境ではdelayed_jobバックエンドを設定せず、その方がジョブがすぐに実行されると思ったからです。
新しい'deliver_later'メソッドをRSpecでテストしようとしているのですが、方法がよくわかりません。
古いコントローラのコードです。
ServiceMailer.delay.new_user(@user)
新しいコントローラのコードです。
ServiceMailer.new_user(@user).deliver_later
私はこのようにテストするためにUSEDを使用しました。
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true))
今、それを使っているとエラーが出ます。(Double "mailer" received unexpected message :deliver_later with (no args)).
ただ
expect(ServiceMailer).to receive(:new_user)
failure with 'undefined method `deliver_later' for nil:NilClass' (nil:NilClassのための未定義のメソッド `deliver_later')で、これも失敗します。
ActiveJobのtest_helperを使ってジョブがキューイングされているかどうかを確認できる例をいくつか試してみましたが、正しいジョブがキューイングされているかどうかをテストすることはできていません。
expect(enqueued_jobs.size).to eq(1)
これは、test_helperが含まれている場合は通過しますが、送信されるメールが正しいかどうかを確認することはできません。
私がやりたいことは
- 正しいメールがキューに入るかテストする (または test 環境ですぐに実行する)
- 正しいパラメータ(@user)で
何かアイデアはありますか? 感謝
どのように解決するのですか?
私が正しく理解していれば、あなたはできるはずです。
message_delivery = instance_double(ActionMailer::MessageDelivery)
expect(ServiceMailer).to receive(:new_user).with(@user).and_return(message_delivery)
allow(message_delivery).to receive(:deliver_later)
重要なことは、何らかの方法で、ダブルを提供する必要があるということです。
deliver_later
.
関連
-
[解決済み】警告:定数 ::Fixnum は非推奨 新しいモデルを生成するとき
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] Rails / Haml: 投稿フォームを作成するには?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] RubyとRailsの "Date.today "フォーマット
-
[解決済み] 構文エラー "構文エラー、予期しない入力終了、keyword_endを期待 (SyntaxError)"
-
[解決済み] Ruby on Rails の新規セットアップ : "Expected string default value for '--rc'; got false (boolean)".
-
[解決済み] RSpecのlet()はいつ使うのか?
-
[解決済み】RSpecのテストを1つだけ実行するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] PG::ConnectionBad - サーバーに接続できませんでした。接続が拒否されました。
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] RubyとRailsの "Date.today "フォーマット
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] Ruby on Rails の新規セットアップ : "Expected string default value for '--rc'; got false (boolean)".