如何将 VSCode 与 pytest ('test discovery fails') 集成?
How to integrate VSCode with pytest ('test discovery fails')?
我无法将项目的单元测试集成到 VSCode 中。测试发现失败,因为 pytest 无法识别源文件。
(澄清一下,这是一个关于 VSCode 的问题,而不是关于 pytest 的问题。我在这里是因为 VSCode 将其问题部分链接到SOF。如果我手动 运行 测试,测试工作正常。)
工具:pyenv
、pipenv
、pytest
。
项目布局:
/src -> source code
/tests/unit -> test code
.vscode/settings.json:
{
"python.envFile": "${workspaceFolder}/.env",
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false
[...]
}
.env:
PYTHONPATH=./src
(注意:根据 this 评论,在 PYTHONPATH 变量的使用 下,我认为 .env 在这里并不重要)
测试发现失败:
tests/unit/test_revoke_default_sg.py:7: in <module>
from revokedefaultsg.app import RevokeDefaultSg, UnknownEventException
E ModuleNotFoundError: No module named 'revokedefaultsg'
=========================== short test summary info ============================
ERROR tests/unit/test_revoke_default_sg.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.08s ===============================
这是由于 ./src
不是 python 路径的一部分,因此测试无法导入源代码。
我可以通过添加到 PYTHONPATH 在 CLI/makefile 级别修复此问题:
PYTHONPATH=./src pytest
这按预期工作。
VSCode 的正确设置是什么?
我应该为测试创建一个启动配置吗?我已经开始研究这个,但无法让它与 pipenv 一起很好地工作。
(OP 在这里)
我认为集成到 VSCode 中的关键是为 pytest 创建一个 特定的启动配置(之前,我只有使用 Python扩展名)。
我现在有两种配置(.vscode/launch.json
):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Run Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"PYTHONPATH": "./src"
}
},
{
"name": "Python: pytest",
"type": "python",
"request": "launch",
"module": "pytest",
"cwd": "${workspaceRoot}",
"env": {
"PYTHONPATH": "./src"
},
"envFile": "${workspaceRoot}/.env",
"console": "integratedTerminal",
}
]
}
运行 此配置在启动 VSCode 后正确发现测试,而不会引发错误。但是,我还没有在不同的项目中尝试过。
此外,也许我没有找到 VSCode 文档的正确部分,但这感觉很沉重 under-documented。我最终搜索 GitHub 以寻找具有启动配置的要点,并将似乎有帮助的内容复制在一起...
我无法将项目的单元测试集成到 VSCode 中。测试发现失败,因为 pytest 无法识别源文件。
(澄清一下,这是一个关于 VSCode 的问题,而不是关于 pytest 的问题。我在这里是因为 VSCode 将其问题部分链接到SOF。如果我手动 运行 测试,测试工作正常。)
工具:pyenv
、pipenv
、pytest
。
项目布局:
/src -> source code
/tests/unit -> test code
.vscode/settings.json:
{
"python.envFile": "${workspaceFolder}/.env",
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": [
"tests"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false
[...]
}
.env:
PYTHONPATH=./src
(注意:根据 this 评论,在 PYTHONPATH 变量的使用 下,我认为 .env 在这里并不重要)
测试发现失败:
tests/unit/test_revoke_default_sg.py:7: in <module>
from revokedefaultsg.app import RevokeDefaultSg, UnknownEventException
E ModuleNotFoundError: No module named 'revokedefaultsg'
=========================== short test summary info ============================
ERROR tests/unit/test_revoke_default_sg.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.08s ===============================
这是由于 ./src
不是 python 路径的一部分,因此测试无法导入源代码。
我可以通过添加到 PYTHONPATH 在 CLI/makefile 级别修复此问题:
PYTHONPATH=./src pytest
这按预期工作。
VSCode 的正确设置是什么?
我应该为测试创建一个启动配置吗?我已经开始研究这个,但无法让它与 pipenv 一起很好地工作。
(OP 在这里)
我认为集成到 VSCode 中的关键是为 pytest 创建一个 特定的启动配置(之前,我只有使用 Python扩展名)。
我现在有两种配置(.vscode/launch.json
):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Run Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"PYTHONPATH": "./src"
}
},
{
"name": "Python: pytest",
"type": "python",
"request": "launch",
"module": "pytest",
"cwd": "${workspaceRoot}",
"env": {
"PYTHONPATH": "./src"
},
"envFile": "${workspaceRoot}/.env",
"console": "integratedTerminal",
}
]
}
运行 此配置在启动 VSCode 后正确发现测试,而不会引发错误。但是,我还没有在不同的项目中尝试过。
此外,也许我没有找到 VSCode 文档的正确部分,但这感觉很沉重 under-documented。我最终搜索 GitHub 以寻找具有启动配置的要点,并将似乎有帮助的内容复制在一起...