我将 rspec 与 email-spec gem 一起使用。我正在尝试做:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"
但这不起作用,有没有办法说正文,文本版本?内容类型:文本/文本?
谢谢
我将 rspec 与 email-spec gem 一起使用。我正在尝试做:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"
但这不起作用,有没有办法说正文,文本版本?内容类型:文本/文本?
谢谢
Body 实际上是一个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)之后,我在ruby 指南中找到了一些信息(第 6 节是关于使用 TestUnit 进行测试),并让它完全按照需要工作:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.encoded.should include("This is the text of the email")
希望有帮助!
如果您有一个 html 模板 ( example.html.erb ),您可以使用:
last_delivery.html_part.body.to_s
或者,如果您有纯文本 ( example.text.erb ) 模板:
last_delivery.text_part.body.to_s
你可以打电话#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
获取正文的通用方法:
(mail.html_part || mail.text_part || mail).body.decoded
如果电子邮件是 multipart ( mail.multipart?
) 则定义其mail.html_part
or mail.text_part
,否则它们为 nil 并mail.body.decoded
返回电子邮件的内容。
您也可以使用body.to_s
代替body.decoded
.
在 Rails 4 中,默认设置last_delivery.body.should include "This is the text of the email"
对我来说很好。
实际上不需要发送邮件来测试内容。你可以测试:
expect(YourMailer.mail_to_test.body).to include "your string"
expect(last_delivery).to have_body_text(/This is the text of the email/)