rspec-email - 如何获取正文?

时间:2011-03-21 22:25:34

标签: rspec rspec2 email-spec

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

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

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

由于

8 个答案:

答案 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

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

答案 4 :(得分:1)

获取正文的通用方法:

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

如果电子邮件是多部分(mail.multipart?),则将定义其mail.html_partmail.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/)

source