rspec-email - Как получить основной текст?
Я использую rspec с гемом электронной почты. Я пытаюсь сделать:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"
Но это не работает, есть ли способ сказать тело, текстовую версию? Тип контента: текст / текст?
Спасибо
6 ответов
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
Источник: в Rails почему мое почтовое тело пусто только в моем тесте?
Ты можешь просто позвонить #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
Если электронное письмо является составным (mail.multipart?
) тогда его mail.html_part
или же mail.text_part
определены, в противном случае они равны нулю и mail.body.decoded
возвращает содержимое электронной почты.
Вы также можете использовать body.to_s
вместо body.decoded
,
На самом деле нет необходимости отправлять почту, чтобы проверить содержимое. Вы можете просто проверить:
expect(YourMailer.mail_to_test.body).to include "your string"
В 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/)