我正在使用带有email-spec gem的rspec。我正在尝试:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"
但这不起作用,有没有办法说出身体,文字版本?内容类型:文字/文字?
由于
答案 0 :(得分:32)
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"
答案 1 :(得分: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")
希望有所帮助!
答案 2 :(得分: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 :(得分:3)
如果你有一个html模板( example.html.erb ),你可以使用:
last_delivery.html_part.body.to_s
或者,如果您有纯文本( example.text.erb )模板:
last_delivery.text_part.body.to_s
答案 4 :(得分:1)
获取正文的通用方法:
(mail.html_part || mail.text_part || mail).body.decoded
如果电子邮件是多部分(mail.multipart?
),则将定义其mail.html_part
或mail.text_part
,否则为nil,mail.body.decoded
返回电子邮件的内容。
您也可以使用body.to_s
代替body.decoded
。
答案 5 :(得分:0)
在Rails 4中,默认last_delivery.body.should include "This is the text of the email"
对我来说很好。
答案 6 :(得分:0)
实际上,无需发送邮件即可测试内容。 您可以测试:
expect(YourMailer.mail_to_test.body).to include "your string"
答案 7 :(得分:-1)
expect(last_delivery).to have_body_text(/This is the text of the email/)