aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2016-02-08 11:47:25 +0100
committerYves Senn <yves.senn@gmail.com>2016-02-16 11:20:59 +0100
commit9d378747326d26cf1afdac4433ead22967af0984 (patch)
treebd377111a1ce085f8e31198fa636f6f9b8235254 /actionmailer/lib
parent3dd9fe5db44777eaf3765875fe259d53e72a0448 (diff)
downloadrails-9d378747326d26cf1afdac4433ead22967af0984.tar.gz
rails-9d378747326d26cf1afdac4433ead22967af0984.tar.bz2
rails-9d378747326d26cf1afdac4433ead22967af0984.zip
reset `ActionMailer::Base.deliveries` in `ActionDispatch::IntegrationTest`.
Whenever you are sending emails in integration tests using the `:test` delivery method you need to make sure that `ActionMailer::Base.deliveries` is reset after every test. This piece of boilerplate code is present in all my applications that send emails. Let's have `ActionDispatch::IntegrationTest` reset the deliveries automatically.
Diffstat (limited to 'actionmailer/lib')
-rw-r--r--actionmailer/lib/action_mailer/railtie.rb2
-rw-r--r--actionmailer/lib/action_mailer/test_case.rb17
2 files changed, 18 insertions, 1 deletions
diff --git a/actionmailer/lib/action_mailer/railtie.rb b/actionmailer/lib/action_mailer/railtie.rb
index fa707021c7..00e3972196 100644
--- a/actionmailer/lib/action_mailer/railtie.rb
+++ b/actionmailer/lib/action_mailer/railtie.rb
@@ -51,6 +51,8 @@ module ActionMailer
get '/rails/mailers/*path' => "rails/mailers#preview"
end
end
+
+ ActionDispatch::IntegrationTest.send :include, ActionMailer::TestCase::ClearTestDeliviers
end
end
diff --git a/actionmailer/lib/action_mailer/test_case.rb b/actionmailer/lib/action_mailer/test_case.rb
index 0aa15e31ba..063d2180f8 100644
--- a/actionmailer/lib/action_mailer/test_case.rb
+++ b/actionmailer/lib/action_mailer/test_case.rb
@@ -11,6 +11,21 @@ module ActionMailer
end
class TestCase < ActiveSupport::TestCase
+ module ClearTestDeliviers
+ extend ActiveSupport::Concern
+
+ included do
+ teardown :clear_test_deliviers
+ end
+
+ private
+ def clear_test_deliviers
+ if ActionMailer::Base.delivery_method == :test
+ ActionMailer::Base.deliveries.clear
+ end
+ end
+ end
+
module Behavior
extend ActiveSupport::Concern
@@ -66,7 +81,6 @@ module ActionMailer
def restore_test_deliveries # :nodoc:
restore_delivery_method
ActionMailer::Base.perform_deliveries = @old_perform_deliveries
- ActionMailer::Base.deliveries.clear
end
def set_delivery_method(method) # :nodoc:
@@ -100,5 +114,6 @@ module ActionMailer
end
include Behavior
+ include ClearTestDeliviers
end
end