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/)

источник

Другие вопросы по тегам