2015-04-05 34 views
15

Mam klasy actionmailer i związane z nią koszty ogólne, działa idealnie. W moim teście jednostki (domyślny minitest rails) treść maila jest jednak pusta. Dlaczego?W Railsach dlaczego moje ciało pocztowe jest puste tylko podczas mojego testu?

moja klasa Mailer:

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 

moje testy:

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 

Poglądy na ten program pocztowy nie są puste, a wszystkie odpowiednie elementy są w rzeczywistości wysłany w wiadomości e-mail. Dlaczego w treści testu jest pusta treść wiadomości e-mail?

+1

Użyj 'email.body.encoded'. Powiedziałbym to jako odpowiedź, ale nie pamiętam, dlaczego musiałem wprowadzić tę zmianę. – messanjah

Odpowiedz

41

Prawdopodobnie masz dwie wersje szablonów wiadomości e-mail (text.erb i html.erb).

Jeśli tak, można użyć email.text_part.body.to_s dla zwykłego e-maila i email.html_part.body.to_s dla wersji HTML.

+2

Holy crap, dlaczego nie jest to w ogóle udokumentowane ?! Dziękuję Ci! – honktronic

+0

Gdzie to robisz? Moje układy nie zostały wygenerowane, gdy użyłem generatora mailerów, więc nie wiem, jak powinien wyglądać. – MCB

+0

Chciałbym móc awansować więcej. – Dan