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 中不发送邮件

Rails 中 ActionMailer Mandrill 的问题

使用 ActionMailer 在 Rails 中发送给多个收件人