В Rails почему мое почтовое тело пусто только в моем тесте?

У меня есть класс actionmailer и связанные с ним издержки, он отлично работает. В моем модульном тесте (rail default minitest) тело письма пусто. Это почему?

мой почтовый класс:

class TermsMailer < ApplicationMailer
  default from: "info@domain.com"
  def notice_email(user,filename)
    @user = user
    @file = filename
    mail(to: "info@domain.com", subject: 'Data downloaded')
  end
end

мой тест:

require 'test_helper'

class TermsMailerTest < ActionMailer::TestCase
  test "notice" do
    email = TermsMailer.notice_email(users(:me),'file.ext').deliver_now
    assert_not ActionMailer::Base.deliveries.empty?
    assert_equal ['info@domain.com'], email.from
    assert_equal ['info@domain.com'], email.to
    assert_equal 'Data downloaded', email.subject
    assert_equal 'arbitrary garbage for comparison', email.body.to_s
  end
end

Представления для этой почтовой программы не являются пустыми, и правильное содержимое фактически отправляется в электронных письмах. Так почему же в моем тесте тело письма пустое?

1 ответ

Решение

Вероятно, у вас есть две версии шаблонов электронной почты (text.erb а также html.erb).

Если это так, вы можете использовать email.text_part.body.to_s для простого текста по электронной почте и email.html_part.body.to_s для версии HTML.

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