Rspec-email - Как получить основной текст?

Я использую rspec с драгоценным камнем электронной почты. Я пытаюсь сделать:

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

Но это не работает, есть ли способ сказать тело, текстовую версию? Content-Type: text/text?

Спасибо

Ответы

Ответ 1

Тело фактически является Mail:: Тело. Вызов raw_source на этом должен сделать трюк:

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

Ответ 2

После выполнения всех вышеперечисленных параметров и невозможности его работы (Rails 3.2.13) я нашел некоторую информацию в рубиновом руководстве (раздел 6 посвящен тестированию с TestUnit) и получил это, чтобы работать точно по мере необходимости:

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

Надеюсь, что это поможет!

Ответ 3

вы можете просто называть #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

Ответ 5

Общий способ получения основного текста:

(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.

Ответ 6

В Rails 4 по умолчанию last_delivery.body.should include "This is the text of the email" отлично работает для меня.

Ответ 7

На самом деле нет необходимости отправлять почту, чтобы проверить содержимое. Вы можете просто проверить:

expect(YourMailer.mail_to_test.body).to include "your string"

Ответ 8

expect(last_delivery).to have_body_text(/This is the text of the email/)

источник