Can I make the pytest doctest module ignore a file?

4.8k views Asked by At

We use pytest to test our project and have enabled --doctest-modules by default to collect all of our doctests from across the project.

However there is one wsgi.py which may not be imported during test collection, but I cant get pytest to ignore it.

I tried putting it in the collect_ignore list in conftest.py but apparently the doctest module does not use this list.

The only thing that does work is putting the whole directory of wsgi.py into norecursedirs in the pytest config file, but this obviously hides the whole directory, which I don't want.

Is there a way to make the doctest module ignore just a certain file?

2

There are 2 answers

0
ANDgineer On

You can use hook to conditionally exclude some folders from test discovery. 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.
    """
2
Grygorii Iermolenko On

As MasterAndrey has mentioned, pytest_ignore_collect should do the trick. Important to note that you should put conftest.py to root folder (the one you run tests from).
Example:

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

Since pytest v4.3.0 there is also --ignore-glob flag which allows to ignore by pattern. Example: pytest --doctest-modules --ignore-glob="*__py3.py" dir/