2017-12-10 1 views
-1

So versuche ich meinen Mailer für Fehlerfälle zu testen, zum Beispiel wäre, wenn der Benutzer keinen Namen eingegeben.Testen Mailer (Ruby on Rails)

dies ist mein Testcode

test "should not send email without name field" do 
    mail = ContactMailer.contact_email("", "[email protected]" , "07982900823", "Thank you for your email!") 

    assert_select mail.name do 
    assert_select "[value=?]", address.mail.name unless address.mail.name.blank? 
end 

Das ist mein Mailer ist.

def contact_email(name, email, telephone, message) 
    @name = name 
    @email = email 
    @telephone = telephone 
    @message = message 

    mail cc: @email 
end 

dies ist meine Validierung Seite

<!DOCTYPE html> 
<html> 
<div> 
<head> 
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script> 
<script src="js/jquery.validate.js"></script> 
</head> 
</div> 
<div> 
<body> 
    <h1><u><%= t('contactpage.contactus') %></u></h1> 
    <p><%= t('contactpage.complete') %></p> 
    <%= form_tag request_contact_path, :id => 'contact_form', method: 'post' do %> 
    <br> 
    <%= label_tag :name, t('mailer.name') %> 
    <%= text_field_tag :name, '', title: "Enter Name", size: 20, :autofocus => true, :required => true%> 
    <br> 
    <%= label_tag :email, t('mailer.email') %> 
    <%= email_field_tag :email, '', title: "Enter Email", :autofocus => true, :required => true%> 
    <br> 
    <%= label_tag :telephone, t('mailer.telephone') %> 
    <%= telephone_field_tag :telephone, '', title: "Enter Telephone", :autofocus => true, :required => true%> 
    <br> 
    <%= label_tag :message, t('mailer.message') %> 
    <%= text_field_tag :message, '', title: "Enter Message", size: 100, :autofocus => true, :required => true%> 
    <br> 
    <%= submit_tag t('mailer.submit'), name: nil %> 
<% end %> 
</body> 
</div> 

<div> 
<script> 
$("contact_form").validate(); 
</script> 
</div> 
</html> 

Ich schätze keine Gedanken darüber, wie ich die Behauptung Test bearbeiten können!

Antwort

1

Mit Rails' Standardkonfiguration eine E-Mail in der Testumgebung zu senden wont tatsächlich eine E-Mail senden, aber es wird zu ActionMailer::Base.deliveries

so in Ihrem Test angehängt werden, um den Code ausführen, der die E-Mail liefert (und soll nicht, wenn Es gibt keinen Namen) und prüfen, ob sich die Größe von ActionMailer::Base.deliveries geändert hat.

test "should not send email without name field" do 
    assert_no_difference 'ActionMailer::Base.deliveries.size' do 
    # run code that operates mailer, but without name 
    post request_contact_url, params: { 
     name: '', 
     email: '[email protected]', 
     telephone: '12345678', 
     message: 'test message' 
    } 
    end 
end 

Ich habe eine leere Zeichenfolge für Namen, weil ich denke, das ist, was es in der Form leer, wenn der Benutzer verlässt kommen könnte durch. Sie können auch versuchen, es mit einer Zeichenfolge mit nur weißen Zeichen und auch mit dem Namensparameter zu testen.

siehe mailers section of the Rails Guide on testing