RailsアプリケーションでSendGridのSMTP APIを使用して電子メールを送信しています。しかし、RSpecを使って電子メールヘッダー(「X-SMTPAPI」)をテストする際に問題が発生しています。RSpecを使用して電子メールヘッダーをテストする方法
はここでメールが(actionmailerのから取り出す:: Base.deliveries)のようになります。
#<Mail::Message:2189335760, Multipart: false, Headers:
<Date: Tue, 20 Dec 2011 16:14:25 +0800>,
<From: "Acme Inc" <[email protected]>>,
<To: [email protected]>,
<Message-ID: <[email protected]>>,
<Subject: Your Acme order>, <Mime-Version: 1.0>,
<Content-Type: text/plain>, <Content-Transfer-Encoding: 7bit>,
<X-SMTPAPI: {"sub":{"|last_name|":[Foo],"|first_name|":[Bar]},"to":["[email protected]"]}>>
ここでは(失敗した)私の仕様コードは次のとおりです。
ActionMailer::Base.deliveries.last.to.should include("[email protected]")
私も様々な試みましたメソッドを使用してヘッダー( "X-SMTPAPI")を取得し、いずれも動作しませんでした。
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String
ヘルプ?
が判明
アップデート(答えは)、私は、電子メールのヘッダの値を取得するには、この操作を行うことができます。
mail.header['X-SMTPAPI'].value
しかし、返される値は、JSON形式です。その後、私がする必要があるすべては、それをデコードすることである:電子メールアドレスの配列を取得するために
sendgrid_header["to"]
:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)
私はこれを行うことができ、ハッシュを返しています。
ありがとうございました。私はemail_specの宝石をチェックアウトしました。 "deliver_to"マッチャーは、 "to"マッチャー( "[email protected]"の代わりに "[email protected]"を返す)と似ていて、 "have_header"マッチャーは単に完全なヘッダーを返します。とにかく、私はこれに対する解決策を見つけ出し、それを今投稿します。ありがとう! –