提交 6ba93ac6 编写于 作者: J José Valim

Merge pull request #6525 from freerange/minitest-passthrough-exceptions

Exceptions like Interrupt & NoMemoryError should not be rescued in tests.
......@@ -4,6 +4,14 @@
module ActiveSupport
module Testing
module SetupAndTeardown
PASSTHROUGH_EXCEPTIONS = [
NoMemoryError,
SignalException,
Interrupt,
SystemExit
]
extend ActiveSupport::Concern
included do
......@@ -28,11 +36,15 @@ def run(runner)
run_callbacks :setup do
result = super
end
rescue *PASSTHROUGH_EXCEPTIONS
raise
rescue Exception => e
result = runner.puke(self.class, method_name, e)
ensure
begin
run_callbacks :teardown
rescue *PASSTHROUGH_EXCEPTIONS
raise
rescue Exception => e
result = runner.puke(self.class, method_name, e)
end
......
......@@ -18,11 +18,9 @@ def options
end
end
def test_callback_with_exception
def test_standard_error_raised_within_setup_callback_is_puked
tc = Class.new(TestCase) do
def self.name
nil
end
def self.name; nil; end
setup :bad_callback
def bad_callback; raise 'oh noes' end
......@@ -41,11 +39,9 @@ def test_true; assert true end
assert_equal 'oh noes', exception.message
end
def test_teardown_callback_with_exception
def test_standard_error_raised_within_teardown_callback_is_puked
tc = Class.new(TestCase) do
def self.name
nil
end
def self.name; nil; end
teardown :bad_callback
def bad_callback; raise 'oh noes' end
......@@ -63,5 +59,51 @@ def test_true; assert true end
assert_equal test_name, name
assert_equal 'oh noes', exception.message
end
def test_passthrough_exception_raised_within_test_method_is_not_rescued
tc = Class.new(TestCase) do
def self.name; nil; end
def test_which_raises_interrupt; raise Interrupt; end
end
test_name = 'test_which_raises_interrupt'
fr = FakeRunner.new
test = tc.new test_name
assert_raises(Interrupt) { test.run fr }
end
def test_passthrough_exception_raised_within_setup_callback_is_not_rescued
tc = Class.new(TestCase) do
def self.name; nil; end
setup :callback_which_raises_interrupt
def callback_which_raises_interrupt; raise Interrupt; end
def test_true; assert true end
end
test_name = 'test_true'
fr = FakeRunner.new
test = tc.new test_name
assert_raises(Interrupt) { test.run fr }
end
def test_passthrough_exception_raised_within_teardown_callback_is_not_rescued
tc = Class.new(TestCase) do
def self.name; nil; end
teardown :callback_which_raises_interrupt
def callback_which_raises_interrupt; raise Interrupt; end
def test_true; assert true end
end
test_name = 'test_true'
fr = FakeRunner.new
test = tc.new test_name
assert_raises(Interrupt) { test.run fr }
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册