rails/railties/test/application/integration_test_case_test.rb
Yves Senn 9d37874732 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.
2016-02-16 11:20:59 +01:00

47 lines
1.2 KiB
Ruby

require 'isolation/abstract_unit'
module ApplicationTests
class IntegrationTestCaseTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
setup do
build_app
boot_rails
end
teardown do
teardown_app
end
test "resets Action Mailer test deliveries" do
script('generate mailer BaseMailer welcome')
app_file 'test/integration/mailer_integration_test.rb', <<-RUBY
require 'test_helper'
class MailerIntegrationTest < ActionDispatch::IntegrationTest
setup do
@old_delivery_method = ActionMailer::Base.delivery_method
ActionMailer::Base.delivery_method = :test
end
teardown do
ActionMailer::Base.delivery_method = @old_delivery_method
end
2.times do |i|
define_method "test_resets_deliveries_\#{i}" do
BaseMailer.welcome.deliver_now
assert_equal 1, ActionMailer::Base.deliveries.count
end
end
end
RUBY
output = Dir.chdir(app_path) { `bin/rails test 2>&1` }
assert_equal 0, $?.to_i, output
assert_match /0 failures, 0 errors/, output
end
end
end