Можно ли заставить модуль pytest doctest игнорировать файл?

Мы используем pytest для тестирования нашего проекта и включили --doctest-modules по умолчанию, чтобы собрать все наши тесты со всего проекта.

Однако есть один wsgi.py который не может быть импортирован во время сбора тестов, но я не могу заставить pytest игнорировать его.

Я пытался положить его в collect_ignore список в conftest.py но, очевидно, модуль doctest не использует этот список.

Единственное, что работает, это помещает весь каталог wsgi.py в norecursedirs в файле конфигурации Pytest, но это, очевидно, скрывает весь каталог, который я не хочу.

Есть ли способ заставить модуль doctest игнорировать только определенный файл?

1 ответ

Как сказал мастер Андрей,pytest_ignore_collectдолжен сделать свое дело. Важно отметить, что вы должны поставитьconftest.pyв корневую папку (из которой вы запускаете тесты).
Пример:

import sys

def pytest_ignore_collect(path):
    if sys.version_info[0] > 2:
        if str(path).endswith("__py2.py"):
            return True
    else:
        if str(path).endswith("__py3.py"):
            return True

Начиная с pytest v4.3.0 существует также --ignore-globфлаг, позволяющий игнорировать по шаблону. Пример:pytest --doctest-modules --ignore-glob="*__py3.py" dir/

Вы можете использовать ловушку, чтобы условно исключить некоторые папки из обнаружения теста. https://docs.pytest.org/en/latest/writing_plugins.html

def pytest_ignore_collect(path, config):
    """ return True to prevent considering this path for collection.
    This hook is consulted for all files and directories prior to calling
    more specific hooks.
    """
Другие вопросы по тегам