Hier ist der beste Weg, den ich gefunden habe, es zu tun.
1) Fügen Sie die action mailer callbacks Plugin wie folgt aus:
script/plugin install git://github.com/AnthonyCaliendo/action_mailer_callbacks.git
ich wirklich nicht die Hauptfunktionen des Plugins verwenden, aber es bietet die schöne Funktionalität in der Lage, um herauszufinden, welche Methode verwendet wurde, senden eine E-Mail.
2) Jetzt können Sie einige Methoden in Ihrem test_helper.rb so:
def assert_sent(method_name)
assert sent_num_times(method_name) > 0
end
def assert_not_sent(method_name)
assert sent_num_times(method_name) == 0
end
def assert_sent_once(method_name)
assert sent_num_times(method_name) == 1
end
def sent_num_times(method_name)
count = 0
@emails.each do |email|
count += 1 if method_name == email.instance_variable_get("@method_name")
end
count
end
3) Jetzt können Sie süß Tests wie folgt schreiben:
require 'test_helper'
class MailingTest < ActionController::IntegrationTest
def setup
@emails = ActionMailer::Base.deliveries
@emails.clear
end
test "should send a mailing" do
assert_difference "Mailing.count", 1 do
feeds(:feed1).generate_mailing
end
assert_sent_once "broadcast"
assert_not_sent "failed_mailing"
end
end
hier "Sendung" und "mailing_failed" sind die Namen der Methoden in meiner ActionMailer :: Base-Klasse. Dies sind diejenigen, die Sie normalerweise verwenden, indem Sie Mailer.deliver_broadcast(some_data)
oder Mailer.deliver_failed_mailing(some_data)
usw. anrufen. Das ist es!
das ist der 'have_sent_email' Matcher http://www.rubydoc.info/gems/shoulda/2.11.3/Shoulda/ActionMailer/Machers (zB' it {sollte_mit_email.with_subject (/ spam /). From (' [email protected] '). mit_body (/ spam /). to ([email protected]')} –