rspec-email - Как получить основной текст? - PullRequest
15 голосов
/ 22 марта 2011

Я использую rspec с гемом email-spec. Я пытаюсь сделать:

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

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

Спасибо

Ответы [ 7 ]

32 голосов
/ 22 марта 2011

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

last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.raw_source.should include "This is the text of the email"
17 голосов
/ 12 июня 2013

Попробовав все вышеперечисленные опции и не запустив его (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")

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

5 голосов
/ 31 октября 2013

Вы можете просто позвонить на #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 голосов
/ 14 декабря 2017

Если у вас есть HTML-шаблон ( example.html.erb ), вы можете использовать:

last_delivery.html_part.body.to_s

Или, если у вас есть простой текст ( пример).text.erb ) template:

last_delivery.text_part.body.to_s

Источник: В Rails почему мое почтовое тело пусто только в моем тесте?

1 голос
/ 19 марта 2019

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

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

0 голосов
/ 27 августа 2014

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

0 голосов
/ 02 апреля 2014
expect(last_delivery).to have_body_text(/This is the text of the email/)

источник

...