2015-04-05 19 views
15

Ho una classe actionmailer e un sovraccarico associato, funziona perfettamente. Nel mio test di unità (rails default minitest) tuttavia, il corpo dell'e-mail è vuoto. Perché?In Rails perché il mio corpo di posta è vuoto solo nel mio test?

mia classe 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 

mio 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 

I punti di vista di questo mailer non sono vuoti, ei contenuti corretti sono infatti inviati in messaggi di posta elettronica. Quindi, perché il corpo dell'email è vuoto nel mio test?

+1

Utilizzare 'email.body.encoded'. Vorrei postare questo come risposta, ma non ricordo perché ho dovuto apportare questo cambiamento. – messanjah

risposta

41

Probabilmente hai due versioni dei modelli di email (text.erb e html.erb).

In tal caso, è possibile utilizzare email.text_part.body.to_s per e-mail di testo semplice e email.html_part.body.to_s per la versione HTML.

+2

Santo schifo, perché questo non è affatto documentato ?! Grazie! – honktronic

+0

Dove lo fai? I miei layout non sono stati generati quando ho usato il generatore di mailer, quindi non so come dovrebbe apparire – MCB

+0

Vorrei poter invocare altro – Dan