提交 3f17fbd6 编写于 作者: G George Claghorn

Add assert_enqueued_emails and assert_no_enqueued_emails

上级 91e31e82
* Add `assert_enqueued_emails` and `assert_no_enqueued_emails`.
def test_emails
assert_enqueued_emails 2 do
ContactMailer.welcome.deliver_later
ContactMailer.welcome.deliver_later
end
end
def test_no_emails
assert_no_enqueued_emails do
# No emails enqueued here
end
end
*George Claghorn*
* Add `_mailer` suffix to mailers created via generator, following the same
naming convention used in controllers and jobs.
......
require 'active_job'
module ActionMailer
# Provides helper methods for testing Action Mailer, including #assert_emails
# and #assert_no_emails
module TestHelper
include ActiveJob::TestHelper
# Asserts that the number of emails sent matches the given number.
#
# def test_emails
......@@ -58,5 +62,52 @@ def assert_emails(number)
def assert_no_emails(&block)
assert_emails 0, &block
end
# Asserts that the number of emails enqueued for later delivery matches
# the given number.
#
# def test_emails
# assert_enqueued_emails 0
# ContactMailer.welcome.deliver_later
# assert_enqueued_emails 1
# ContactMailer.welcome.deliver_later
# assert_enqueued_emails 2
# end
#
# If a block is passed, that block should cause the specified number of
# emails to be enqueued.
#
# def test_emails_again
# assert_enqueued_emails 1 do
# ContactMailer.welcome.deliver_later
# end
#
# assert_enqueued_emails 2 do
# ContactMailer.welcome.deliver_later
# ContactMailer.welcome.deliver_later
# end
# end
def assert_enqueued_emails(number, &block)
assert_enqueued_jobs number, only: ActionMailer::DeliveryJob, &block
end
# Asserts that no emails are enqueued for later delivery.
#
# def test_no_emails
# assert_no_enqueued_emails
# ContactMailer.welcome.deliver_later
# assert_enqueued_emails 1
# end
#
# If a block is provided, it should not cause any emails to be enqueued.
#
# def test_no_emails
# assert_no_enqueued_emails do
# # No emails should be enqueued from this block
# end
# end
def assert_no_enqueued_emails(&block)
assert_no_enqueued_jobs only: ActionMailer::DeliveryJob, &block
end
end
end
......@@ -119,6 +119,53 @@ def test_assert_no_emails_failure
assert_match(/0 .* but 1/, error.message)
end
def test_assert_enqueued_emails
assert_nothing_raised do
assert_enqueued_emails 1 do
TestHelperMailer.test.deliver_later
end
end
end
def test_assert_enqueued_emails_too_few_sent
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_enqueued_emails 2 do
TestHelperMailer.test.deliver_later
end
end
assert_match(/2 .* but 1/, error.message)
end
def test_assert_enqueued_emails_too_many_sent
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_enqueued_emails 1 do
TestHelperMailer.test.deliver_later
TestHelperMailer.test.deliver_later
end
end
assert_match(/1 .* but 2/, error.message)
end
def test_assert_no_enqueued_emails
assert_nothing_raised do
assert_no_enqueued_emails do
TestHelperMailer.test.deliver_now
end
end
end
def test_assert_no_enqueued_emails_failure
error = assert_raise ActiveSupport::TestCase::Assertion do
assert_no_enqueued_emails do
TestHelperMailer.test.deliver_later
end
end
assert_match(/0 .* but 1/, error.message)
end
end
class AnotherTestHelperMailerTest < ActionMailer::TestCase
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册