Clear sys.last_* attributes before running an item
Otherwise we will keep the last failed exception around forever Related to #2798
This commit is contained in:
parent
ad0b4330e7
commit
ba407b5eb6
|
@ -105,6 +105,7 @@ def pytest_runtest_setup(item):
|
|||
|
||||
def pytest_runtest_call(item):
|
||||
_update_current_test_var(item, 'call')
|
||||
sys.last_type, sys.last_value, sys.last_traceback = (None, None, None)
|
||||
try:
|
||||
item.runtest()
|
||||
except Exception:
|
||||
|
@ -114,7 +115,7 @@ def pytest_runtest_call(item):
|
|||
sys.last_type = type
|
||||
sys.last_value = value
|
||||
sys.last_traceback = tb
|
||||
del tb # Get rid of it in this namespace
|
||||
del type, value, tb # Get rid of these in this frame
|
||||
raise
|
||||
|
||||
|
||||
|
|
|
@ -719,18 +719,20 @@ def test_makereport_getsource_dynamic_code(testdir, monkeypatch):
|
|||
result.stdout.fnmatch_lines(["*test_fix*", "*fixture*'missing'*not found*"])
|
||||
|
||||
|
||||
def test_store_except_info_on_eror():
|
||||
def test_store_except_info_on_error():
|
||||
""" Test that upon test failure, the exception info is stored on
|
||||
sys.last_traceback and friends.
|
||||
"""
|
||||
# Simulate item that raises a specific exception
|
||||
class ItemThatRaises(object):
|
||||
# Simulate item that might raise a specific exception, depending on `raise_error` class var
|
||||
class ItemMightRaise(object):
|
||||
nodeid = 'item_that_raises'
|
||||
raise_error = True
|
||||
|
||||
def runtest(self):
|
||||
if self.raise_error:
|
||||
raise IndexError('TEST')
|
||||
try:
|
||||
runner.pytest_runtest_call(ItemThatRaises())
|
||||
runner.pytest_runtest_call(ItemMightRaise())
|
||||
except IndexError:
|
||||
pass
|
||||
# Check that exception info is stored on sys
|
||||
|
@ -738,6 +740,13 @@ def test_store_except_info_on_eror():
|
|||
assert sys.last_value.args[0] == 'TEST'
|
||||
assert sys.last_traceback
|
||||
|
||||
# The next run should clear the exception info stored by the previous run
|
||||
ItemMightRaise.raise_error = False
|
||||
runner.pytest_runtest_call(ItemMightRaise())
|
||||
assert sys.last_type is None
|
||||
assert sys.last_value is None
|
||||
assert sys.last_traceback is None
|
||||
|
||||
|
||||
def test_current_test_env_var(testdir, monkeypatch):
|
||||
pytest_current_test_vars = []
|
||||
|
|
Loading…
Reference in New Issue