File tree Expand file tree Collapse file tree 3 files changed +31
-5
lines changed Expand file tree Collapse file tree 3 files changed +31
-5
lines changed Original file line number Diff line number Diff line change 1+ Fixed crash on `parametrize(..., scope="package") ` without a package present.
Original file line number Diff line number Diff line change @@ -155,6 +155,8 @@ def get_scope_node(
155155def add_funcarg_pseudo_fixture_def (
156156 collector : nodes .Collector , metafunc : "Metafunc" , fixturemanager : "FixtureManager"
157157) -> None :
158+ import _pytest .python
159+
158160 # This function will transform all collected calls to functions
159161 # if they use direct funcargs (i.e. direct parametrization)
160162 # because we want later test execution to be able to rely on
@@ -192,11 +194,17 @@ def add_funcarg_pseudo_fixture_def(
192194 if scope is not Scope .Function :
193195 node = get_scope_node (collector , scope )
194196 if node is None :
195- assert scope is Scope .Class and isinstance (
196- collector , _pytest .python .Module
197- )
198- # Use module-level collector for class-scope (for now).
199- node = collector
197+ # If used class scope and there is no class, use module-level
198+ # collector (for now).
199+ if scope is Scope .Class :
200+ assert isinstance (collector , _pytest .python .Module )
201+ node = collector
202+ # If used package scope and there is no package, use session
203+ # (for now).
204+ elif scope is Scope .Package :
205+ node = collector .session
206+ else :
207+ assert False , f"Unhandled missing scope: { scope } "
200208 if node is None :
201209 name2pseudofixturedef = None
202210 else :
Original file line number Diff line number Diff line change @@ -1486,6 +1486,23 @@ def test_foo(x):
14861486 ]
14871487 )
14881488
1489+ @pytest .mark .parametrize ("scope" , ["class" , "package" ])
1490+ def test_parametrize_missing_scope_doesnt_crash (
1491+ self , pytester : Pytester , scope : str
1492+ ) -> None :
1493+ """Doesn't crash when parametrize(scope=<scope>) is used without a
1494+ corresponding <scope> node."""
1495+ pytester .makepyfile (
1496+ f"""
1497+ import pytest
1498+
1499+ @pytest.mark.parametrize("x", [0], scope="{ scope } ")
1500+ def test_it(x): pass
1501+ """
1502+ )
1503+ result = pytester .runpytest ()
1504+ assert result .ret == 0
1505+
14891506
14901507class TestMetafuncFunctionalAuto :
14911508 """Tests related to automatically find out the correct scope for
You can’t perform that action at this time.
0 commit comments