これが機能の提案/リクエストに適した場所であることを願っています。
どのActiveJobジョブがキューに入れられているか( have_enqueued_job
)を確認するのに役立つ特定のマッチャーがありますが、ActionMailerには同様のものはありません。
いくつか調べてみましたが、これがメールが送信されたことをテストするために使用される一般的な方法のようです。 どの電子メールが送信されたかを説明
expect {
post :create, params: { user: attributes_for(:user) }
}.to change(ActionMailer::Base.deliveries, :size).by(1)
より具体的で説明的な仕様を作成できるように、電子メール用の追加のマッチャーがあれば素晴らしいと思います。
expect {
post :create, params: { user: attributes_for(:user) }
}.to have_enqueued_mailer(UserMailer, :welcome).with(User.first)
これに似た既存の機能を見逃していないことを願っています。よく見てきましたが、そのようなものは見つかりませんでした。
遅くなるよりはましですが、このカスタムマッチャーは多かれ少なかれトリックを行う必要があります。
RSpec::Matchers.define :have_enqueued_mailer do |mailer_klass, mailer_action|
match do |actual|
actual.call
<strong i="6">@mailer_klass</strong>, <strong i="7">@mailer_action</strong>, _, *<strong i="8">@args</strong> = enqueued_jobs[0][:args]
<strong i="9">@mailer_klass</strong> == mailer_klass.to_s &&
<strong i="10">@mailer_action</strong> == mailer_action.to_s
end
chain :with do |*args|
<strong i="11">@args</strong> == args
end
supports_block_expectations
end
この問題は#1901と重複していますか?
はい@ybiquitous! :)
マッチャーをありがとう@cgat 。
#1901の締めくくり
最も参考になるコメント
遅くなるよりはましですが、このカスタムマッチャーは多かれ少なかれトリックを行う必要があります。