Ответ 1
Тело фактически является Mail:: Тело. Вызов raw_source на этом должен сделать трюк:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.raw_source.should include "This is the text of the email"
Я использую rspec с драгоценным камнем электронной почты. Я пытаюсь сделать:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.body.should include "This is the text of the email"
Но это не работает, есть ли способ сказать тело, текстовую версию? Content-Type: text/text?
Спасибо
Тело фактически является Mail:: Тело. Вызов 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) я нашел некоторую информацию в рубиновом руководстве (раздел 6 посвящен тестированию с TestUnit) и получил это, чтобы работать точно по мере необходимости:
last_delivery = ActionMailer::Base.deliveries.last
last_delivery.encoded.should include("This is the text of the email")
Надеюсь, что это поможет!
вы можете просто называть #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
Если у вас есть html-шаблон (example.html.erb), вы можете использовать:
last_delivery.html_part.body.to_s
Или, если у вас есть шаблон plain-text (example.text.erb):
last_delivery.text_part.body.to_s
Источник: В Rails почему мой почтовый ящик пуст только в моем тесте?
Общий способ получения основного текста:
(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
.
В Rails 4 по умолчанию last_delivery.body.should include "This is the text of the email"
отлично работает для меня.
На самом деле нет необходимости отправлять почту, чтобы проверить содержимое. Вы можете просто проверить:
expect(YourMailer.mail_to_test.body).to include "your string"
expect(last_delivery).to have_body_text(/This is the text of the email/)