Pytest cov не читает pyproject.toml

Pytest cov не считывает свои настройки из файла pyproject.toml. Я использую nox, поэтому я запускаю тест с помощью:

python3 -m nox

Кажется, у меня такая же проблема даже без nox.

Фактически, после запуска poetry install:

  • poetry run pytest --cov=src проходит тест
  • poetry run pytest --cov не проходит тест

В частности, при провале теста у меня есть следующий вывод (вывод обрезан до самых важных вещей):

WARNING: Failed to generate report: No data to report.

/Users/matteo/Library/Caches/pypoetry/virtualenvs/project-Nz69kfmJ-py3.7/lib/python3.7/site-packages/pytest_cov/plugin.py:271: PytestWarning: Failed to generate report: No data to report.

  self.cov_controller.finish()


---------- coverage: platform darwin, python 3.7.7-final-0 -----------

FAIL Required test coverage of 100.0% not reached. Total coverage: 0.00%

Код с воспроизводимой ошибкой. Чтобы запустить его, вам нужно установить поэзию и установить nox.


person user1315621    schedule 09.07.2020    source источник
comment
Что именно не проходит проверку? Вы дважды добавили одну и ту же команду.   -  person hoefling    schedule 10.07.2020
comment
Я так виноват. Исправьте это выше   -  person user1315621    schedule 10.07.2020
comment
Мне кажется, что вы неправильно используете макет src. Значение каталога src состоит в том, чтобы избежать случайного импорта кода из репозитория, гарантируя, что пакет всегда будет установлен. poetry поддерживает src макет; в вашем случае вам нужно будет добавить packages = [{ include = 'project', from = 'src' }] в раздел tool.poetry и source = ['project'] в tool.coverage.run.   -  person hoefling    schedule 10.07.2020
comment
Или вы можете полностью удалить каталог src, если вам не нужен макет src. В любом случае, from src.project import code должен быть исправлен. Ваш корневой пакет project, а не src.   -  person hoefling    schedule 10.07.2020
comment
Это важный урок, спасибо. Я вижу, что просто изменение импорта решает проблему. Если вы хотите написать это как ответ, я приму это, спасибо!   -  person user1315621    schedule 10.07.2020


Ответы (1)


Превращение комментария в ответ:

Проверьте текущую обработку каталога src. Прямо сейчас это кажется пакетом пространства имен, который не соответствует вашим намерениям. Либо переключитесь на раскладку src:

# pyproject.toml

[tool.poetry]
...
packages = [
    { include = 'project', from = 'src' }
]

[tool.coverage.run]
...
source = ['project']

и исправить импорт в test_code.py:

from src.project import code

to

from project import code

или удалите каталог src:

rootdir
├── project
│   └── __init__.py
└── tests
    └── test_code.py

и исправить импорт в test_code.py.

person hoefling    schedule 10.07.2020