File tree Expand file tree Collapse file tree 3 files changed +29
-5
lines changed Expand file tree Collapse file tree 3 files changed +29
-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(
155
155
def add_funcarg_pseudo_fixture_def (
156
156
collector : nodes .Collector , metafunc : "Metafunc" , fixturemanager : "FixtureManager"
157
157
) -> None :
158
+ import _pytest .python
159
+
158
160
# This function will transform all collected calls to functions
159
161
# if they use direct funcargs (i.e. direct parametrization)
160
162
# because we want later test execution to be able to rely on
@@ -192,11 +194,17 @@ def add_funcarg_pseudo_fixture_def(
192
194
if scope is not Scope .Function :
193
195
node = get_scope_node (collector , scope )
194
196
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 } "
200
208
if node is None :
201
209
name2pseudofixturedef = None
202
210
else :
Original file line number Diff line number Diff line change @@ -1486,6 +1486,21 @@ def test_foo(x):
1486
1486
]
1487
1487
)
1488
1488
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
+
1489
1504
1490
1505
class TestMetafuncFunctionalAuto :
1491
1506
"""Tests related to automatically find out the correct scope for
You can’t perform that action at this time.
0 commit comments