2011-12-20 19 views
14

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) 

私はこれを行うことができ、ハッシュを返しています。

答えて

9

email_spec宝石が、これは簡単にするマッチャーの束を持って、あなたは

mail.should have_header('X-SMTPAPI', some_value) 
mail.should deliver_to('[email protected]') 

のようなものを行うそして、その宝石にソースを熟読することができ、あなたがしたくない場合は、正しい方向にあなたを指している必要がありますそれを使用する

mail.to.addrs 

戻ります電子メールアドレス(「ボブのようなものではなく)

mail.header['foo'] 

あなたがチェックしているものに応じて(あなたのfooヘッダのフィールドを取得します実際のフィールド値を取得するにはto_sと呼ぶことができます)

+0

ありがとうございました。私はemail_specの宝石をチェックアウトしました。 "deliver_to"マッチャーは、 "to"マッチャー( "[email protected]"の代わりに "[email protected]"を返す)と似ていて、 "have_header"マッチャーは単に完全なヘッダーを返します。とにかく、私はこれに対する解決策を見つけ出し、それを今投稿します。ありがとう! –

関連する問題