Merge pull request #4744 from blueyed/fix-4592-collectfile

Fix handling of collect_ignore from parent conftest
This commit is contained in:
Daniel Hahler 2019-02-08 20:58:11 +01:00 committed by GitHub
commit 5ca81596bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 5 deletions

View File

@ -0,0 +1 @@
Fix handling of ``collect_ignore`` via parent ``conftest.py``.

View File

@ -607,6 +607,7 @@ class Session(nodes.FSCollector):
yield y yield y
def _collectfile(self, path, handle_dupes=True): def _collectfile(self, path, handle_dupes=True):
assert path.isfile()
ihook = self.gethookproxy(path) ihook = self.gethookproxy(path)
if not self.isinitpath(path): if not self.isinitpath(path):
if ihook.pytest_ignore_collect(path=path, config=self.config): if ihook.pytest_ignore_collect(path=path, config=self.config):

View File

@ -599,6 +599,7 @@ class Package(Module):
return proxy return proxy
def _collectfile(self, path, handle_dupes=True): def _collectfile(self, path, handle_dupes=True):
assert path.isfile()
ihook = self.gethookproxy(path) ihook = self.gethookproxy(path)
if not self.isinitpath(path): if not self.isinitpath(path):
if ihook.pytest_ignore_collect(path=path, config=self.config): if ihook.pytest_ignore_collect(path=path, config=self.config):
@ -642,9 +643,10 @@ class Package(Module):
): ):
continue continue
if path.isdir() and path.join("__init__.py").check(file=1): if path.isdir():
if path.join("__init__.py").check(file=1):
pkg_prefixes.add(path) pkg_prefixes.add(path)
else:
for x in self._collectfile(path): for x in self._collectfile(path):
yield x yield x

View File

@ -1144,3 +1144,16 @@ def test_collect_symlink_out_of_tree(testdir):
] ]
) )
assert result.ret == 0 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