Call pytest_report_collectionfinish hook when --collect-only is passed

Fix #2895
This commit is contained in:
Bruno Oliveira 2019-02-05 21:29:30 -02:00
parent a9457345ee
commit 54af0f4c65
3 changed files with 14 additions and 9 deletions

View File

@ -0,0 +1 @@
The ``pytest_report_collectionfinish`` hook now is also called with ``--collect-only``.

View File

@ -574,19 +574,20 @@ class TerminalReporter(object):
return lines return lines
def pytest_collection_finish(self, session): def pytest_collection_finish(self, session):
if self.config.option.collectonly: if self.config.getoption("collectonly"):
self._printcollecteditems(session.items) self._printcollecteditems(session.items)
if self.stats.get("failed"):
self._tw.sep("!", "collection failures")
for rep in self.stats.get("failed"):
rep.toterminal(self._tw)
return 1
return 0
lines = self.config.hook.pytest_report_collectionfinish( lines = self.config.hook.pytest_report_collectionfinish(
config=self.config, startdir=self.startdir, items=session.items config=self.config, startdir=self.startdir, items=session.items
) )
self._write_report_lines_from_hooks(lines) self._write_report_lines_from_hooks(lines)
if self.config.getoption("collectonly"):
if self.stats.get("failed"):
self._tw.sep("!", "collection failures")
for rep in self.stats.get("failed"):
rep.toterminal(self._tw)
def _printcollecteditems(self, items): def _printcollecteditems(self, items):
# to print out items and their parent collectors # to print out items and their parent collectors
# we take care to leave out Instances aka () # we take care to leave out Instances aka ()

View File

@ -649,7 +649,10 @@ class TestTerminalFunctional(object):
assert "===" not in s assert "===" not in s
assert "passed" not in s assert "passed" not in s
def test_report_collectionfinish_hook(self, testdir): @pytest.mark.parametrize(
"params", [(), ("--collect-only",)], ids=["no-params", "collect-only"]
)
def test_report_collectionfinish_hook(self, testdir, params):
testdir.makeconftest( testdir.makeconftest(
""" """
def pytest_report_collectionfinish(config, startdir, items): def pytest_report_collectionfinish(config, startdir, items):
@ -664,7 +667,7 @@ class TestTerminalFunctional(object):
pass pass
""" """
) )
result = testdir.runpytest() result = testdir.runpytest(*params)
result.stdout.fnmatch_lines(["collected 3 items", "hello from hook: 3 items"]) result.stdout.fnmatch_lines(["collected 3 items", "hello from hook: 3 items"])