Improve error message when using @pytest.fixture twice
While obvious in hindsight, this error message confused me. I thought my fixture
function was used in a test function twice, since the wording is ambiguous.
Also, the error does not tell me *which* function is the culprit.
Finally, this adds a test, which wasn't done in
cfd16d0dac
where this was originally implemented.
This commit is contained in:
parent
022f1b4de5
commit
9a1c8b31c7
|
@ -1203,7 +1203,7 @@ class FixtureFunctionMarker:
|
||||||
|
|
||||||
if getattr(function, "_pytestfixturefunction", False):
|
if getattr(function, "_pytestfixturefunction", False):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"fixture is being applied more than once to the same function"
|
f"@pytest.fixture is being applied more than once to the same function {function.__name__!r}"
|
||||||
)
|
)
|
||||||
|
|
||||||
if hasattr(function, "pytestmark"):
|
if hasattr(function, "pytestmark"):
|
||||||
|
|
|
@ -4354,6 +4354,23 @@ def test_call_fixture_function_error():
|
||||||
assert fix() == 1
|
assert fix() == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_fixture_double_decorator(pytester: Pytester) -> None:
|
||||||
|
"""Check if an error is raised when using @pytest.fixture twice."""
|
||||||
|
pytester.makepyfile(
|
||||||
|
"""
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
@pytest.fixture
|
||||||
|
def fixt():
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = pytester.runpytest()
|
||||||
|
result.assert_outcomes(errors=1)
|
||||||
|
result.stdout.fnmatch_lines(["E * ValueError: @pytest.fixture is being applied more than once to the same function 'fixt'"])
|
||||||
|
|
||||||
|
|
||||||
def test_fixture_param_shadowing(pytester: Pytester) -> None:
|
def test_fixture_param_shadowing(pytester: Pytester) -> None:
|
||||||
"""Parametrized arguments would be shadowed if a fixture with the same name also exists (#5036)"""
|
"""Parametrized arguments would be shadowed if a fixture with the same name also exists (#5036)"""
|
||||||
pytester.makepyfile(
|
pytester.makepyfile(
|
||||||
|
|
Loading…
Reference in New Issue