mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add assert_enqueued_emails and assert_no_enqueued_emails
This commit is contained in:
parent
91e31e82fe
commit
3f17fbd68d
3 changed files with 115 additions and 0 deletions
|
@ -1,3 +1,20 @@
|
|||
* 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.
|
||||
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
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 @@ module ActionMailer
|
|||
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 @@ class TestHelperMailerTest < ActionMailer::TestCase
|
|||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue