Fix checking expected warnings when an exception is raised
pytest.warn and similar functions should capture warnings when an exception is raised inside a with block
This commit is contained in:
parent
58cf20edf0
commit
6a8946718d
|
@ -0,0 +1 @@
|
||||||
|
``pytest.warns`` and similar functions now capture warnings when an exception is raised inside a ``with`` block.
|
|
@ -280,24 +280,22 @@ class WarningsChecker(WarningsRecorder):
|
||||||
def found_str():
|
def found_str():
|
||||||
return pformat([record.message for record in self], indent=2)
|
return pformat([record.message for record in self], indent=2)
|
||||||
|
|
||||||
# only check if we're not currently handling an exception
|
if self.expected_warning is not None:
|
||||||
if exc_type is None and exc_val is None and exc_tb is None:
|
if not any(issubclass(r.category, self.expected_warning) for r in self):
|
||||||
if self.expected_warning is not None:
|
__tracebackhide__ = True
|
||||||
if not any(issubclass(r.category, self.expected_warning) for r in self):
|
fail(
|
||||||
__tracebackhide__ = True
|
f"DID NOT WARN. No warnings of type {self.expected_warning} were emitted.\n"
|
||||||
|
f"The list of emitted warnings is: {found_str()}."
|
||||||
|
)
|
||||||
|
elif self.match_expr is not None:
|
||||||
|
for r in self:
|
||||||
|
if issubclass(r.category, self.expected_warning):
|
||||||
|
if re.compile(self.match_expr).search(str(r.message)):
|
||||||
|
break
|
||||||
|
else:
|
||||||
fail(
|
fail(
|
||||||
f"DID NOT WARN. No warnings of type {self.expected_warning} were emitted.\n"
|
f"""\
|
||||||
f"The list of emitted warnings is: {found_str()}."
|
|
||||||
)
|
|
||||||
elif self.match_expr is not None:
|
|
||||||
for r in self:
|
|
||||||
if issubclass(r.category, self.expected_warning):
|
|
||||||
if re.compile(self.match_expr).search(str(r.message)):
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
fail(
|
|
||||||
f"""\
|
|
||||||
DID NOT WARN. No warnings of type {self.expected_warning} matching the regex were emitted.
|
DID NOT WARN. No warnings of type {self.expected_warning} matching the regex were emitted.
|
||||||
Regex: {self.match_expr}
|
Regex: {self.match_expr}
|
||||||
Emitted warnings: {found_str()}"""
|
Emitted warnings: {found_str()}"""
|
||||||
)
|
)
|
||||||
|
|
|
@ -179,6 +179,7 @@ class TestDeprecatedCall:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def f():
|
def f():
|
||||||
|
warnings.warn(DeprecationWarning("hi"))
|
||||||
raise ValueError("some exception")
|
raise ValueError("some exception")
|
||||||
|
|
||||||
with pytest.raises(ValueError, match="some exception"):
|
with pytest.raises(ValueError, match="some exception"):
|
||||||
|
|
Loading…
Reference in New Issue