がRequestOfferを呼び出し、パラメータとして作成されたリソースを使用してactionmailerのに電子メールを送信:Rspec:まだ存在しないリソースでの受信を期待するには?
@request_offer = RequestOffer.new(request_offer_params)
if @request_offer.save
RequestOfferMailer.email_team(@request_offer).deliver_later
end
、私は私のことをテストしたい場合は、私のコントローラの仕様RequestOfferMailerは、リソース@request_offerをパラメータとしてメソッドemail_teamを使用して呼び出されます。
(YYY).with(ZZZ)を受け取るには(XXX)。私が見つけた唯一の方法は、POSTリクエストを行う前に私の期待を宣言することでした。しかし、ZZZはこのPOST要求によって作成されるので、私は前もって予想を設定する方法がありません。
# Set expectation first
message_delivery = instance_double(ActionMailer::MessageDelivery)
# ZZZ used in .with() does not exist yet, so it won't work
expect(RequestOfferMailer).to receive(:email_team).with(ZZZ).and_return(message_delivery)
expect(message_delivery).to receive(:deliver_later)
# Make POST request that will create ZZZ
post :create, params
どのようにこの問題を解決するには?
私は理想的にそれ以上のテストをします。しかし、あなたのリンクは、ソリューション、ユーザーの顧客マッチャーを提供する何かを提供しています:https://relishapp.com/rspec/rspec-mocks/v/3-0/docs/setting-constraints/matching-arguments#using-a-カスタムマッチャー私は、それが重要なアトリビュートが同じであることによって、それがRequestOfferのインスタンスであることをチェックすることを定義することができます。phone_numberと、メールのテンプレートに必要な私のメール。誰かがもっと簡単な解決策を持っているかどうかを見てみましょうが、ヒントのために既にありがとう! –