Skip to content

Commit 44ecf2a

Browse files
committed
invocation-scoped fixtures show up once with --fixtures
1 parent aa145fa commit 44ecf2a

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

_pytest/python.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,16 +1014,26 @@ def _showfixtures_main(config, session):
10141014
fm = session._fixturemanager
10151015

10161016
available = []
1017+
seen = set()
1018+
10171019
for argname, fixturedefs in fm._arg2fixturedefs.items():
10181020
assert fixturedefs is not None
10191021
if not fixturedefs:
10201022
continue
10211023
for fixturedef in fixturedefs:
10221024
loc = getlocation(fixturedef.func, curdir)
1025+
fixture_argname = fixturedef.argname
1026+
# invocation-scoped fixtures have argname in the form
1027+
# "<name>:<scope>" (for example: "monkeypatch:session").
1028+
if ':' in fixture_argname:
1029+
fixture_argname = fixture_argname.split(':')[0]
1030+
if (fixture_argname, loc) in seen:
1031+
continue
1032+
seen.add((fixture_argname, loc))
10231033
available.append((len(fixturedef.baseid),
10241034
fixturedef.func.__module__,
10251035
curdir.bestrelpath(loc),
1026-
fixturedef.argname, fixturedef))
1036+
fixture_argname, fixturedef))
10271037

10281038
available.sort()
10291039
currentmodule = None

testing/python/fixture.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2725,6 +2725,13 @@ def test_bar(arg1):
27252725
Hi from test module
27262726
''')
27272727

2728+
def test_show_invocation_fixtures(self, testdir):
2729+
"""py.test --fixtures should display invocation-scoped fixtures once.
2730+
"""
2731+
result = testdir.runpytest("--fixtures")
2732+
result.stdout.fnmatch_lines('''monkeypatch''')
2733+
assert 'monkeypatch:session' not in result.stdout.str()
2734+
27282735

27292736
@pytest.mark.parametrize('flavor', ['fixture', 'yield_fixture'])
27302737
class TestContextManagerFixtureFuncs:

0 commit comments

Comments
 (0)