24

在我的ActionMailer :: TestCase的測試,我期待:Rails - 如何測試ActionMailer發送的特定附件?

@expected.to  = BuyadsproMailer.group_to(campaign.agency.users) 
@expected.subject = "You submitted #{offer_log.total} worth of offers for #{offer_log.campaign.name} " 
@expected.from = "BuyAds Pro <[email protected]>" 
@expected.body = read_fixture('deliver_to_agency') 

@expected.content_type = "multipart/mixed;\r\n boundary=\"something\"" 
@expected.attachments["#{offer_log.aws_key}.pdf"] = { 
    :mime_type => 'application/pdf', 
    :content => fake_pdf.body 
} 

和存根我的郵件得到fake_pdf,而不是一個真正的PDF通常從S3獲取的,這樣我敢肯定,PDF文件匹配的機構。

不過,我得到這個長的錯誤告訴我,一個電子郵件,但卻得到了一個稍微不同的電子郵件:

<...Mime-Version: 1.0\r\nContent-Type: multipart/mixed\r\nContent-Transfer-Encoding: 7bit...> expected but was 
<...Mime-Version: 1.0\r\nContent-Type: multipart/mixed;\r\n boundary=\"--==_mimepart_50f06fa9c06e1_118dd3fd552035ae03352b\";\r\n charset=UTF-8\r\nContent-Transfer-Encoding: 7bit...> 

我不匹配生成的電子郵件的字符集或部分邊界。

如何定義或存根預期電子郵件的這方面?

回答

38

下面是我從一個特定附件的RSpec的測試複製一個例子,希望它有助於(郵件可以通過調用你的郵件法或致電.deliver後交貨陣列偷看被創造):

mail.attachments.should have(1).attachment 
    attachment = mail.attachments[0] 
    attachment.should be_a_kind_of(Mail::Part) 
    attachment.content_type.should be_start_with('application/ics;') 
    attachment.filename.should == 'event.ics' 
+0

有沒有辦法比較md5散列? – mehulkar

+2

很好的答案。雖然檢查結果是一種'Mail :: Part'似乎是不必要的,如果在未來版本的Rails中類名不同,可能會使測試不必要地變得脆弱。如果對象不是正確的類型,那麼它響應'content_type'和'filename'方法的可能性就非常低。 –

+1

如果我使用rails minitest框架,該怎麼辦? –

相關問題