我正在使用带有email-spec gem的rspec。我正在尝试:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"
但这不起作用,有没有办法说出身体,文字版本?内容类型:文字/文字?
谢谢
身体实际上是一个Mail::Body实例。在其上调用raw_source应该可以解决问题:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.raw_source.should include "This is the text of the email"
在尝试了所有上述选项并且无法使其正常工作之后(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")
希望有所帮助!
你可以打电话给#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
如果你有一个html模板(example.html.erb),你可以使用:
last_delivery.html_part.body.to_s
或者,如果您有一个纯文本(example.text.erb)模板:
last_delivery.text_part.body.to_s
获取正文的通用方法:
(mail.html_part || mail.text_part || mail).body.decoded
如果电子邮件是多部分(mail.multipart?
),则定义其mail.html_part
或mail.text_part
,否则它们为零,mail.body.decoded
返回电子邮件的内容。
您也可以使用body.to_s
而不是body.decoded
。
在Rails 4中,默认的last_delivery.body.should include "This is the text of the email"
对我来说很好。
expect(last_delivery).to have_body_text(/This is the text of the email/)