Rails-如何测试ActionMailer发送了特定附件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails-如何测试ActionMailer发送了特定附件?相关的知识,希望对你有一定的参考价值。
在我的ActionMailer :: TestCase测试中,我期望:
@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 <feedback@buyads.com>"
@expected.body = read_fixture('deliver_to_agency')
@expected.content_type = "multipart/mixed;
boundary="something""
@expected.attachments["#{offer_log.aws_key}.pdf"] = {
:mime_type => 'application/pdf',
:content => fake_pdf.body
}
并存根我的邮件来获取fake_pdf,而不是通常从S3获取的真实PDF,以便我确定PDF的正文匹配。
但是,我得到了一个长错误,告诉我应该收到一封电子邮件,但电子邮件略有不同:
<...Mime-Version: 1.0
Content-Type: multipart/mixed
Content-Transfer-Encoding: 7bit...> expected but was
<...Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="--==_mimepart_50f06fa9c06e1_118dd3fd552035ae03352b";
charset=UTF-8
Content-Transfer-Encoding: 7bit...>
我与所生成电子邮件的字符集或部分边界不匹配。
我应该如何定义或存入预期电子邮件的这一方面?
答案
这是我从rspec测试中复制的特定附件示例,希望对您有所帮助(可以通过调用您的mailer方法来创建邮件,或者在调用.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'
另一答案
我有类似的地方想要检查附件中csv的内容。我需要这样的内容,因为它看起来像
已插入换行符:
expect(mail.attachments.first.body.encoded.gsub(/
/, '')).to(
eq(
<<~CSV
"Foo","Bar"
"1","2"
CSV
)
)
以上是关于Rails-如何测试ActionMailer发送了特定附件?的主要内容,如果未能解决你的问题,请参考以下文章
Rails ActionMailer 用户邮件发送器 无方法
使用 rspec 进行 ActionMailer 测试 [关闭]
如何使用 Actionmailer/Ruby on Rails 发送具有多个动态 smtp 的电子邮件
ActionMailer 在开发 Rails 4 中不发送邮件