Rspec 不显示邮件正文中的内容

Posted

技术标签:

【中文标题】Rspec 不显示邮件正文中的内容【英文标题】:Rspec doesnt show the content in mail body 【发布时间】:2022-01-19 13:15:54 【问题描述】:

在测试我的邮件内容时,在实际邮件中它会显示邮件内容,但是在 rspec 中测试我的邮件时它不显示内容,因为它只显示电子邮件图像附件,以前没有在邮件中发送附件,它在 rspec 中显示电子邮件正文,但现在它在附加图像附件后不显示 rspec 中的内容,所以如何获取内容

我的 rspec 结果

#<Mail::Body:0x00555c3bbcef70

 @boundary="--==_mimepart_61bb2dce1d6b1_f92aae1ba4534536817",

       + @charset="US-ASCII",
       + @encoding="7bit",
       + @epilogue=nil,
       + @part_sort_order=["text/plain", "text/enriched", "text/html"],

       + @parts=
       +  [#<Mail::Part:46927317154560, Multipart: false, Headers: <Content-Type: text/html>>,

       +   #<Mail::Part:46927293531360, Multipart: false, Headers: <Content-Type: image/jpeg; filename="image.jpg">, <Content-Transfer-Encoding: binary>, <Content-Disposition: attachment; filename="image.jpg">, <Content-ID: <61bb2dc84fb25_f92486@c430e0bef0fd.mail>>>,

       +   #<Mail::Part:46927312188120, Multipart: false, Headers: <Content-Type: image/png; filename="user2_app.png">, <Content-Transfer-Encoding: binary>, <Content-Disposition: attachment; filename="user2_app.png">, <Content-ID: <61bb2dca13d5f_565ac@c430e0bef0fd.mail>>>,

       +   #<Mail::Part:469273513434, Multipart: false, Headers: <Content-Type: image/png; filename="user2_app.png">, <Content-Transfer-Encoding: binary>, <Content-Disposition: attachment; filename="user2.png">, <Content-ID: <61bb2dcc44fa_34346bd@c430e0bef0fd.mail>>>,
       +   ,
       + @preamble=nil,
 @raw_source="">

我的 rspec 方法

 mail = Mailer.send_mail_to_user(user_name,address)

expect(mail.body).to include("Welcome user")

但在我发送的实际邮件中包含文本欢迎用户

但在 rspec 中没有显示?

如何测试,请帮助我

【问题讨论】:

【参考方案1】:

expect(mail.body).to include("Welcome user") 仅在您发送仅包含文本的简单电子邮件时才真正起作用。当您发送多部分电子邮件时,您需要匹配电子邮件的特定部分:

let(:html_body) do
  mail.body.parts.find  |p| p.content_type.match 'text/html' .body.raw_source
end 

it "contains hello world" do
  expect(html_body).to include("Welcome user")
end

【讨论】:

通过共享行为或自定义匹配器更优雅的方式来做到这一点。如果没有用于电子邮件测试的 gem,我会感到惊讶。 谢谢@max,它有效

以上是关于Rspec 不显示邮件正文中的内容的主要内容,如果未能解决你的问题,请参考以下文章

为啥在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文

解决java mail发送TXT附件被直接显示在正文中的问题

当我们使用 phpMailer 发送带有动态内容的邮件时,如何在电子邮件正文中显示多个内联图像

为啥电子邮件在正文中显示 mime 边界/

Gmail 中的 HTML 电子邮件 - 嵌入图像

PHP邮件功能html内容在电子邮件中不可见