Skip to content

Commit

Permalink
Merge pull request #1520 from omarkohl/invalid_test_module_name
Browse files Browse the repository at this point in the history
Raise CollectError if import test module fails
  • Loading branch information
nicoddemus committed Apr 26, 2016
2 parents 52babba + 5685589 commit fdee88f
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 10 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@
parametrize.
Thanks `@palaviv`_ for the complete PR (`#1474`_).

*
* Fix `#1426`_ Make ImportError during collection more explicit by reminding
the user to check the name of the test module/package(s).
Thanks `@omarkohl`_ for the complete PR (`#1520`_).

.. _@milliams: https://github.com/milliams
.. _@novas0x2a: https://github.com/novas0x2a
Expand All @@ -53,6 +55,7 @@
.. _@palaviv: https://github.com/palaviv
.. _@omarkohl: https://github.com/omarkohl

.. _#1426: https://github.com/pytest-dev/pytest/issues/1426
.. _#1428: https://github.com/pytest-dev/pytest/pull/1428
.. _#1444: https://github.com/pytest-dev/pytest/pull/1444
.. _#1441: https://github.com/pytest-dev/pytest/pull/1441
Expand All @@ -61,6 +64,7 @@
.. _#1468: https://github.com/pytest-dev/pytest/pull/1468
.. _#1474: https://github.com/pytest-dev/pytest/pull/1474
.. _#1502: https://github.com/pytest-dev/pytest/pull/1502
.. _#1520: https://github.com/pytest-dev/pytest/pull/1520
.. _#372: https://github.com/pytest-dev/pytest/issues/372

2.9.2.dev1
Expand Down
8 changes: 8 additions & 0 deletions _pytest/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,14 @@ def _importtestmodule(self):
"unique basename for your test file modules"
% e.args
)
except ImportError:
exc_class, exc, _ = sys.exc_info()
raise self.CollectError(
"ImportError while importing test module '%s'.\n"
"Original error message:\n'%s'\n"
"Make sure your test modules/packages have valid Python names."
% (self.fspath, exc or exc_class)
)
#print "imported test module", mod
self.config.pluginmanager.consider_module(mod)
return mod
Expand Down
3 changes: 2 additions & 1 deletion testing/acceptance_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ def test_this():
result = testdir.runpytest(p)
result.stdout.fnmatch_lines([
#XXX on jython this fails: "> import import_fails",
"E ImportError: No module named *does_not_work*",
"ImportError while importing test module*",
"'No module named *does_not_work*",
])
assert result.ret == 1

Expand Down
18 changes: 15 additions & 3 deletions testing/python/collect.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
import _pytest._code
import py
import pytest
from _pytest.main import EXIT_NOTESTSCOLLECTED
from _pytest.main import (
Collector,
EXIT_NOTESTSCOLLECTED
)


class TestModule:
def test_failing_import(self, testdir):
modcol = testdir.getmodulecol("import alksdjalskdjalkjals")
pytest.raises(ImportError, modcol.collect)
pytest.raises(ImportError, modcol.collect)
pytest.raises(Collector.CollectError, modcol.collect)

def test_import_duplicate(self, testdir):
a = testdir.mkdir("a")
Expand Down Expand Up @@ -60,6 +62,16 @@ def test_module_considers_pluginmanager_at_import(self, testdir):
modcol = testdir.getmodulecol("pytest_plugins='xasdlkj',")
pytest.raises(ImportError, lambda: modcol.obj)

def test_invalid_test_module_name(self, testdir):
a = testdir.mkdir('a')
a.ensure('test_one.part1.py')
result = testdir.runpytest("-rw")
result.stdout.fnmatch_lines([
"ImportError while importing test module*test_one.part1*",
"Make sure your test modules/packages have valid Python names.",
])


class TestClass:
def test_class_with_init_warning(self, testdir):
testdir.makepyfile("""
Expand Down
3 changes: 2 additions & 1 deletion testing/test_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ def test_collection_error(self, testdir):
assert "__import__" not in result.stdout.str(), "too long traceback"
result.stdout.fnmatch_lines([
"*ERROR collecting*",
"*mport*not_exists*"
"ImportError while importing test module*",
"'No module named *not_exists*",
])

def test_custom_repr_failure(self, testdir):
Expand Down
2 changes: 1 addition & 1 deletion testing/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def test_this():
reprec = testdir.inline_run(tfile)
l = reprec.getfailedcollections()
assert len(l) == 1
out = l[0].longrepr.reprcrash.message
out = str(l[0].longrepr)
assert out.find('does_not_work') != -1

def test_raises_output(self, testdir):
Expand Down
6 changes: 3 additions & 3 deletions testing/test_terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,8 @@ def test_collectonly_error(self, testdir):
assert result.ret == 1
result.stdout.fnmatch_lines(_pytest._code.Source("""
*ERROR*
*import Errlk*
*ImportError*
*No module named *Errlk*
*1 error*
""").strip())

Expand Down Expand Up @@ -665,8 +665,8 @@ def test_collect_fail(self, testdir, option):
testdir.makepyfile("import xyz\n")
result = testdir.runpytest(*option.args)
result.stdout.fnmatch_lines([
"? import xyz",
"E ImportError: No module named *xyz*",
"ImportError while importing*",
"'No module named *xyz*",
"*1 error*",
])

Expand Down

0 comments on commit fdee88f

Please sign in to comment.