aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
diff options
context:
space:
mode:
authorEdouard CHIN <edouard.chin@shopify.com>2018-04-05 22:22:46 -0400
committerEdouard CHIN <edouard.chin@shopify.com>2018-04-06 04:54:56 -0400
commit70fae9a434d64238663fea3d4c6abdc86206a0f2 (patch)
tree131f45061347d6a880fdbfd3759b7854fba2a00c /activesupport/lib
parentd514ce9199fac58e569482dc901e53d0526abdf7 (diff)
downloadrails-70fae9a434d64238663fea3d4c6abdc86206a0f2.tar.gz
rails-70fae9a434d64238663fea3d4c6abdc86206a0f2.tar.bz2
rails-70fae9a434d64238663fea3d4c6abdc86206a0f2.zip
`SetupAndTeardown#teardown` should call any subsequent after_teardown:
If you have a regular test that have a teardown block, and for any reason an exception get raised, ActiveSupport will not run subsequent after_teardown method provided by other module or gems. One of them being the ActiveRecord::TestFixtures which won't rollback the transation when the test ends making all subsequent test to be in a weird state. The default implementation of minitest is to run all teardown methods from the user's test, rescue all exceptions, run all after_teardown methods provided by libraries and finally re-raise the exception that happened in the user's teardown method. Rails should do the same.
Diffstat (limited to 'activesupport/lib')
-rw-r--r--activesupport/lib/active_support/testing/setup_and_teardown.rb9
1 files changed, 8 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/testing/setup_and_teardown.rb b/activesupport/lib/active_support/testing/setup_and_teardown.rb
index 1dbf3c5da0..35236f1401 100644
--- a/activesupport/lib/active_support/testing/setup_and_teardown.rb
+++ b/activesupport/lib/active_support/testing/setup_and_teardown.rb
@@ -44,8 +44,15 @@ module ActiveSupport
end
def after_teardown # :nodoc:
- run_callbacks :teardown
+ begin
+ run_callbacks :teardown
+ rescue => e
+ error = e
+ end
+
super
+ ensure
+ raise error if error
end
end
end