# HG changeset patch # User Thomas De Schampheleire # Date 2019-06-11 20:53:33 # Node ID afa5e0bdb76fb30db671dfc355675ff641640ec2 # Parent 460cfae112034951cc5d86ca8c92f8ad6c1e9874 tests: run doctests via pytest pytest can run doctests as part of the standard testsuite run. See documentation at [1]. pytest will discover doctests in all python files it can find. However, some files cannot be imported directly in this manner. Fix this by adding a filter in conftest.py in the root directory. This code could also live in kallithea/conftest.py, but it cannot be in kallithea/tests/conftest.py because that level is deeper than the files we want to filter. [1] https://docs.pytest.org/en/latest/doctest.html diff --git a/conftest.py b/conftest.py new file mode 100644 --- /dev/null +++ b/conftest.py @@ -0,0 +1,24 @@ +import mock +import os +import pytest +import sys + +here = os.path.dirname(__file__) + +def pytest_ignore_collect(path): + # ignore all files outside the 'kallithea' directory + if not str(path).startswith(os.path.join(here, 'kallithea')): + return True + + # during doctest verification, normally all python files will be imported. + # Thus, files that cannot be imported normally should be ignored. + # Files that generate ImportErrors are ignored via + # '--doctest-ignore-import-errors' (pytest.ini) + kallithea_ignore_paths = ( + # AttributeError: 'module' object has no attribute 'config' + '/kallithea/alembic/env.py', + # collection of the following file messes up the rest of test execution + '/kallithea/tests/scripts/manual_test_concurrency.py', + ) + if str(path).endswith(kallithea_ignore_paths): + return True diff --git a/pytest.ini b/pytest.ini --- a/pytest.ini +++ b/pytest.ini @@ -7,3 +7,6 @@ addopts = -rfEsxXw # Shorter scrollbacks; less stuff to scroll through --tb=short + # + --doctest-modules + --doctest-ignore-import-errors