pytest-asyncio
pytest-asyncio copied to clipboard
ModuleNotFoundError with pytest-doctestplus
I'm hitting an issue using pytest-asyncio alongside pytest-doctestplus, a plugin for detecting tests in documentation. I admittedly don't know which plugin might need to change here, though given the popularity of doctests it would be great if the two worked together.
Reproduce
Create a README.md containing:
``` python
def test():
pass
```
``` pycon
>>> 1 + 1
2
```
Then run:
$ pip install pytest-asyncio pytest-doctestplus
...
$ pytest --doctest-plus --doctest-glob '*.md'
=========================== test session starts ============================
platform linux -- Python 3.10.12, pytest-8.2.2, pluggy-1.5.0
rootdir: /tmp/bees
plugins: doctestplus-1.2.1, asyncio-0.23.7
asyncio: mode=strict
collected 0 items / 1 error
================================== ERRORS ==================================
________________________ ERROR collecting README.md ________________________
ImportError while importing test module '/tmp/bees/README.md'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib/python3.10/importlib/__init__.py:126: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
E ModuleNotFoundError: No module named 'README'
========================= short test summary info ==========================
ERROR README.md
!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!
============================= 1 error in 0.20s =============================
Cross reference: https://github.com/scientific-python/pytest-doctestplus/issues/256
It's not unlikely that pytest-asyncio is at fault here. The plugin has some pretty ugly code that runs during test collection: https://github.com/pytest-dev/pytest-asyncio/blob/v0.23.7/pytest_asyncio/plugin.py#L575-L653
Essentially, it can only deal with standard pytest collectors and its subclasses. This could be a reason for the error you're seeing.
What's the collector type of the README file in your example?
What's the collector type of the README file in your example?
I don't know. @bsipocz as you'd looked at this from the doctestplus side, perhaps you can help here?
We certainly customised the collector, but not as a subclass, so it all could be the source of the problem. As I see there is certainly more care put in the API docs collection than in the narrative docs files, so I'll try a few things this week to see if we have an easy fix for this.
I think this can be closed with the newest release of pytest-doctestplus
Thanks for the update @bsipocz !