fixtures: remove special cases when deciding when pytest.fixture() is a direct decoration
pytest.fixture() can be used either as
@pytest.fixture
def func(): ...
or as
@pytest.fixture()
def func(): ...
or (while maybe not intended)
func = pytest.fixture(func)
so it needs to inspect internally whether it got a function in the first
positional argument or not.
Previously, there were was oddity. In the following,
func = pytest.fixture(func, autouse=True)
# OR
func = pytest.fixture(func, parms=['a', 'b'])
The result is as if `func` wasn't passed.
There isn't any reason for this special that I can understand, so remove
it.
This commit is contained in:
parent
54ae27f081
commit
5507752c53
|
|
@ -0,0 +1,3 @@
|
||||||
|
When using ``pytest.fixture`` on a function directly, as in ``pytest.fixture(func)``,
|
||||||
|
if the ``autouse`` or ``params`` arguments are also passed, the function is no longer
|
||||||
|
ignored, but is marked as a fixture.
|
||||||
|
|
@ -1152,13 +1152,15 @@ def fixture(
|
||||||
if params is not None:
|
if params is not None:
|
||||||
params = list(params)
|
params = list(params)
|
||||||
|
|
||||||
if fixture_function and params is None and autouse is False:
|
fixture_marker = FixtureFunctionMarker(
|
||||||
# direct decoration
|
scope=scope, params=params, autouse=autouse, ids=ids, name=name,
|
||||||
return FixtureFunctionMarker(scope, params, autouse, name=name)(
|
)
|
||||||
fixture_function
|
|
||||||
)
|
|
||||||
|
|
||||||
return FixtureFunctionMarker(scope, params, autouse, ids=ids, name=name)
|
# Direct decoration.
|
||||||
|
if fixture_function:
|
||||||
|
return fixture_marker(fixture_function)
|
||||||
|
|
||||||
|
return fixture_marker
|
||||||
|
|
||||||
|
|
||||||
def yield_fixture(
|
def yield_fixture(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue