rspec-email - 如何获取正文?

问题描述 投票:15回答:7

我正在使用带有email-spec gem的rspec。我正在尝试:

last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"

但这不起作用,有没有办法说出身体,文字版本?内容类型:文字/文字?

谢谢

rspec rspec2 email-spec
7个回答
32
投票

身体实际上是一个Mail::Body实例。在其上调用raw_source应该可以解决问题:

last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.raw_source.should include "This is the text of the email"

17
投票

在尝试了所有上述选项并且无法使其正常工作之后(Rails 3.2.13),我在the ruby guide中找到了一些信息(第6节是关于使用TestUnit进行测试)并且根据需要使其正常工作:

last_delivery = ActionMailer::Base.deliveries.last
last_delivery.encoded.should include("This is the text of the email")

希望有所帮助!


5
投票

你可以打电话给#to_s

last_delivery.to_s.should include "This is the text of the email"

对于多部分电子邮件:

last_delivery.first.to_s.should include "This is the text of the email"

测试并发现正在开发Rails 4


3
投票

如果你有一个html模板(example.html.erb),你可以使用:

last_delivery.html_part.body.to_s

或者,如果您有一个纯文本(example.text.erb)模板:

last_delivery.text_part.body.to_s

资料来源:In Rails why is my mail body empty only in my test?


2
投票

获取正文的通用方法:

(mail.html_part || mail.text_part || mail).body.decoded

如果电子邮件是多部分(mail.multipart?),则定义其mail.html_partmail.text_part,否则它们为零,mail.body.decoded返回电子邮件的内容。

您也可以使用body.to_s而不是body.decoded


0
投票

在Rails 4中,默认的last_delivery.body.should include "This is the text of the email"对我来说很好。


-1
投票
expect(last_delivery).to have_body_text(/This is the text of the email/)

source

© www.soinside.com 2019 - 2024. All rights reserved.