aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/test_helper.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2006-11-05 21:56:18 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2006-11-05 21:56:18 +0000
commitba553f94248340b54b32cee1fcbd41295713d180 (patch)
tree232174d19991632ef0583cb685d5f3c520a510cd /actionmailer/lib/action_mailer/test_helper.rb
parent2fbe0ae7a2d945dbd9d0e0abad23afde75db67fb (diff)
downloadrails-ba553f94248340b54b32cee1fcbd41295713d180.tar.gz
rails-ba553f94248340b54b32cee1fcbd41295713d180.tar.bz2
rails-ba553f94248340b54b32cee1fcbd41295713d180.zip
Add assert_emails and assert_no_emails to test the number of emails delivered. Closes #6479.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5436 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionmailer/lib/action_mailer/test_helper.rb')
-rw-r--r--actionmailer/lib/action_mailer/test_helper.rb67
1 files changed, 67 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/test_helper.rb b/actionmailer/lib/action_mailer/test_helper.rb
new file mode 100644
index 0000000000..3a1612442f
--- /dev/null
+++ b/actionmailer/lib/action_mailer/test_helper.rb
@@ -0,0 +1,67 @@
+module ActionMailer
+ module TestHelper
+ # Asserts that the number of emails sent matches the given number.
+ #
+ # def test_emails
+ # assert_emails 0
+ # ContactMailer.deliver_contact
+ # assert_emails 1
+ # ContactMailer.deliver_contact
+ # assert_emails 2
+ # end
+ #
+ # If a block is passed, that block should cause the specified number of emails to be sent.
+ #
+ # def test_emails_again
+ # assert_emails 1 do
+ # ContactMailer.deliver_contact
+ # end
+ #
+ # assert_emails 2 do
+ # ContactMailer.deliver_contact
+ # ContactMailer.deliver_contact
+ # end
+ # end
+ def assert_emails(number)
+ if block_given?
+ original_count = ActionMailer::Base.deliveries.size
+ yield
+ new_count = ActionMailer::Base.deliveries.size
+ assert_equal original_count + number, new_count, "#{number} emails expected, but #{new_count - original_count} were sent"
+ else
+ assert_equal number, ActionMailer::Base.deliveries.size
+ end
+ end
+
+ # Assert that no emails have been sent.
+ #
+ # def test_emails
+ # assert_no_emails
+ # ContactMailer.deliver_contact
+ # assert_emails 1
+ # end
+ #
+ # If a block is passed, that block should not cause any emails to be sent.
+ #
+ # def test_emails_again
+ # assert_no_emails do
+ # # No emails should be sent from this block
+ # end
+ # end
+ #
+ # Note: This assertion is simply a shortcut for:
+ #
+ # assert_emails 0
+ def assert_no_emails(&block)
+ assert_emails 0, &block
+ end
+ end
+end
+
+module Test
+ module Unit
+ class TestCase
+ include ActionMailer::TestHelper
+ end
+ end
+end