In Rails why is my mail body empty only in my test?
Asked Answered
S

1

22

I have an actionmailer class and associated overhead, it works perfectly. In my unit test (rails default minitest) however, the email body is empty. Why is that?

my mailer class:

class TermsMailer < ApplicationMailer
  default from: "[email protected]"
  def notice_email(user,filename)
    @user = user
    @file = filename
    mail(to: "[email protected]", subject: 'Data downloaded')
  end
end

my test:

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 ['[email protected]'], email.from
    assert_equal ['[email protected]'], email.to
    assert_equal 'Data downloaded', email.subject
    assert_equal 'arbitrary garbage for comparison', email.body.to_s
  end
end

The views for this mailer are not blank, and the correct contents are in fact sent in the emails. So why is the email body blank in my test?

Salmi answered 5/4, 2015 at 4:33 Comment(1)
Use email.body.encoded. I would post this as an answer, but I don't remember why I had to make that change.Lucho
S
67

You probably have two versions of the email templates (text.erb and html.erb).

If so, you can use email.text_part.body.to_s for plain-text email and email.html_part.body.to_s for HTML version.

Solidary answered 8/4, 2015 at 18:33 Comment(1)
Where do you do this? My layouts weren't generated when I used the mailer generator so I don't know what it should look likePhyllis

© 2022 - 2024 — McMap. All rights reserved.