これが私が見つけた最良の方法です。
1)アクション メーラー コールバックプラグインを次のようにインクルードします。
script/plugin install git://github.com/AnthonyCaliendo/action_mailer_callbacks.git
プラグインの主な機能は実際には使用しませんが、メールの送信に使用された方法を特定できるという優れた機能を提供します。
2) これで、次のようにいくつかのメソッドを test_helper.rb に入れることができます:
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) これで、次のような甘いテストを書くことができます:
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
ここで、"broadcast" と "mailing_failed" は、私の ActionMailer::Base クラスのメソッドの名前です。これらは、通常、呼び出しなどで使用するものですMailer.deliver_broadcast(some_data)
。Mailer.deliver_failed_mailing(some_data)
それだけです。