diff --git a/src/pytest_bdd/compat.py b/src/pytest_bdd/compat.py index c7dd5b15..6e126b77 100644 --- a/src/pytest_bdd/compat.py +++ b/src/pytest_bdd/compat.py @@ -3,19 +3,27 @@ from collections.abc import Sequence from importlib.metadata import version -from _pytest.fixtures import FixtureDef, FixtureManager +from _pytest.fixtures import FixtureDef as _FixtureDef +from _pytest.fixtures import FixtureManager from _pytest.nodes import Node from packaging.version import parse as parse_version pytest_version = parse_version(version("pytest")) +__all__ = ["getfixturedefs", "FixtureDef"] if pytest_version.release >= (8, 1): - def getfixturedefs(fixturemanager: FixtureManager, fixturename: str, node: Node) -> Sequence[FixtureDef] | None: + def getfixturedefs(fixturemanager: FixtureManager, fixturename: str, node: Node) -> Sequence[_FixtureDef] | None: return fixturemanager.getfixturedefs(fixturename, node) + def FixtureDef(fixturemanager, **kwargs): + kwargs.setdefault("config", fixturemanager.config) + return _FixtureDef(**kwargs) + else: def getfixturedefs(fixturemanager: FixtureManager, fixturename: str, node: Node) -> Sequence[FixtureDef] | None: return fixturemanager.getfixturedefs(fixturename, node.nodeid) + + FixtureDef = _FixtureDef diff --git a/src/pytest_bdd/steps.py b/src/pytest_bdd/steps.py index 98f116d6..247d9cb3 100644 --- a/src/pytest_bdd/steps.py +++ b/src/pytest_bdd/steps.py @@ -42,9 +42,10 @@ def _(article): from typing import Any, Callable, Iterable, Literal, TypeVar import pytest -from _pytest.fixtures import FixtureDef, FixtureRequest +from _pytest.fixtures import FixtureRequest from typing_extensions import ParamSpec +from . import compat from .parser import Step from .parsers import StepParser, get_parser from .types import GIVEN, THEN, WHEN @@ -210,7 +211,7 @@ def inject_fixture(request: FixtureRequest, arg: str, value: Any) -> None: :param value: argument value """ - fd = FixtureDef( + fd = compat.FixtureDef( fixturemanager=request._fixturemanager, baseid=None, argname=arg, @@ -224,6 +225,7 @@ def inject_fixture(request: FixtureRequest, arg: str, value: Any) -> None: add_fixturename = arg not in request.fixturenames def fin() -> None: + # TODO: Still required? request._fixturemanager._arg2fixturedefs[arg].remove(fd) if old_fd is not None: