doctest: don't open code the module import
Currently, `DoctestModule` does `import_path` on its own. This changes it to use `importtestmodule` as `Module` does. The behavioral changes are: - Much better error messages on import errors. - Handles a few more error cases (see `importtestmodule`). This technically expands the cover of `--doctest-ignore-import-errors` but I think it makes sense. - Considers `pytest_plugins` in the module. - Populates `self.obj` as properly (without double-imports) as is expected from a `PyCollector`. This is also needed for the next commit.
This commit is contained in:
parent
b9d02c5b53
commit
6e5008f19f
|
@ -40,7 +40,6 @@ from _pytest.nodes import Item
|
||||||
from _pytest.outcomes import OutcomeException
|
from _pytest.outcomes import OutcomeException
|
||||||
from _pytest.outcomes import skip
|
from _pytest.outcomes import skip
|
||||||
from _pytest.pathlib import fnmatch_ex
|
from _pytest.pathlib import fnmatch_ex
|
||||||
from _pytest.pathlib import import_path
|
|
||||||
from _pytest.python import Module
|
from _pytest.python import Module
|
||||||
from _pytest.python_api import approx
|
from _pytest.python_api import approx
|
||||||
from _pytest.warning_types import PytestWarning
|
from _pytest.warning_types import PytestWarning
|
||||||
|
@ -107,7 +106,7 @@ def pytest_addoption(parser: Parser) -> None:
|
||||||
"--doctest-ignore-import-errors",
|
"--doctest-ignore-import-errors",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=False,
|
default=False,
|
||||||
help="Ignore doctest ImportErrors",
|
help="Ignore doctest collection errors",
|
||||||
dest="doctest_ignore_import_errors",
|
dest="doctest_ignore_import_errors",
|
||||||
)
|
)
|
||||||
group.addoption(
|
group.addoption(
|
||||||
|
@ -561,12 +560,8 @@ class DoctestModule(Module):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
module = import_path(
|
module = self.obj
|
||||||
self.path,
|
except Collector.CollectError:
|
||||||
root=self.config.rootpath,
|
|
||||||
mode=self.config.getoption("importmode"),
|
|
||||||
)
|
|
||||||
except ImportError:
|
|
||||||
if self.config.getvalue("doctest_ignore_import_errors"):
|
if self.config.getvalue("doctest_ignore_import_errors"):
|
||||||
skip("unable to import module %r" % self.path)
|
skip("unable to import module %r" % self.path)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue