Skip to content

Commit

Permalink
Fix handling of collect_ignore from parent conftest
Browse files Browse the repository at this point in the history
`_collectfile` should be called on files only.

Fixes #4592.
  • Loading branch information
blueyed committed Feb 8, 2019
1 parent ea73246 commit 913a2da
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 5 deletions.
1 change: 1 addition & 0 deletions changelog/4592.bugfix.rst
@@ -0,0 +1 @@
Fix handling of ``collect_ignore`` via parent ``conftest.py``.
1 change: 1 addition & 0 deletions src/_pytest/main.py
Expand Up @@ -607,6 +607,7 @@ def filter_(f):
yield y

def _collectfile(self, path, handle_dupes=True):
assert path.isfile()
ihook = self.gethookproxy(path)
if not self.isinitpath(path):
if ihook.pytest_ignore_collect(path=path, config=self.config):
Expand Down
12 changes: 7 additions & 5 deletions src/_pytest/python.py
Expand Up @@ -599,6 +599,7 @@ def gethookproxy(self, fspath):
return proxy

def _collectfile(self, path, handle_dupes=True):
assert path.isfile()
ihook = self.gethookproxy(path)
if not self.isinitpath(path):
if ihook.pytest_ignore_collect(path=path, config=self.config):
Expand Down Expand Up @@ -642,11 +643,12 @@ def collect(self):
):
continue

if path.isdir() and path.join("__init__.py").check(file=1):
pkg_prefixes.add(path)

for x in self._collectfile(path):
yield x
if path.isdir():
if path.join("__init__.py").check(file=1):
pkg_prefixes.add(path)
else:
for x in self._collectfile(path):
yield x


def _get_xunit_setup_teardown(holder, attr_name, param_obj=None):
Expand Down
13 changes: 13 additions & 0 deletions testing/test_collection.py
Expand Up @@ -1144,3 +1144,16 @@ def test_nodeid(request):
]
)
assert result.ret == 0


def test_collectignore_via_conftest(testdir, monkeypatch):
"""collect_ignore in parent conftest skips importing child (issue #4592)."""
tests = testdir.mkpydir("tests")
tests.ensure("conftest.py").write("collect_ignore = ['ignore_me']")

ignore_me = tests.mkdir("ignore_me")
ignore_me.ensure("__init__.py")
ignore_me.ensure("conftest.py").write("assert 0, 'should_not_be_called'")

result = testdir.runpytest()
assert result.ret == EXIT_NOTESTSCOLLECTED

0 comments on commit 913a2da

Please sign in to comment.