【问题标题】:Pytest cov does not read pyproject.tomlPytest cov 不读取 pyproject.toml
【发布时间】:2020-07-09 22:39:53
【问题描述】:

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%

Code with a reproducible error here。 要运行它,您需要 install poetryinstall nox

【问题讨论】:

  • 究竟是什么没有通过测试?您已经添加了两次相同的命令。
  • 我很抱歉。在上面修复它
  • 在我看来,您使用的 src 布局错误。 src 目录的含义是避免从存储库中意外导入代码,确保始终安装包。 poetry 支持src 布局;在您的情况下,您必须将packages = [{ include = 'project', from = 'src' }] 添加到tool.poetry 部分并将source = ['project'] 添加到tool.coverage.run
  • 如果您不需要 src 布局,您可以完全删除 src 目录。无论如何,from src.project import code 应该是固定的。你的根包是project,而不是src
  • 这是一个重要的教训,谢谢。我看到只需更改导入即可解决问题。如果您想将其写为答案,我会接受,谢谢!

标签: python pytest code-coverage pytest-cov pyproject.toml


【解决方案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

from project import code

或删除src 目录:

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

并修复 test_code.py 中的导入。

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多