[英]How do I debug individual Django tests in vscode?
我添加了一个启动配置,允许我在 Django 中运行所有测试,另一个允许我运行服务器,这两个都可以正常工作。
我正在寻找一种调试单个文件的方法,但是在参数中使用${file}
会给出 django 不喜欢的正常路径。
我想要一种将${file}
更改为 python 路径的方法,以便我可以在单个文件上调试我的测试。
python manage.py test --noinput --keepdb python.path.to.my.file
在命令行中工作。
以下配置似乎几乎是正确的:
{ "name": "Test File",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"test",
"--noinput",
"--keepdb",
"${file}"
],
"django": true
}
但是,当我运行此配置时,我收到一个错误,我认为这是因为${file}
变成
path/to/my/file
而不是path.to.my.file
。
如果您使用的是 Mac 或 Linux,以下启动配置应该适用于 Django 执行的单个单元测试:
{
"name": "Python: Django Debug Single Test",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"test",
"`echo -n ${relativeFileDirname} | tr \/ .`.${fileBasenameNoExtension}"
],
"django": true
},
这使用tr
命令将/
转换为.
在相对路径中。
如果您使用的是 Windows 和 git bash,则带有 tr 的启动配置也可以使用,但您需要引用变量替换并引用双反斜杠。
{
"name": "Python: Django Debug Single Test",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"test",
"`echo -n \"${relativeFileDirname}\" | tr \\\\ .`.${fileBasenameNoExtension}"
],
"django": true
},
没有文件路径到点名称的翻译,因此您需要在您的launch.json
中对其进行硬编码。
这适用于我在wsl ubuntu下的windows中,你的tests.py作为打开文件:
{
"name": "Test Django",
"type": "python",
"request": "launch",
"python": "${workspaceFolder}/../.venv/bin/python",
"program": "${workspaceFolder}/manage.py",
"args": [
"test",
"${relativeFileDirname}"
],
"django": true
},
我认为你不需要任何回声 | tr ... fileBasenameNoExtension 等
如评论之一所述,对于较新版本的 vscode,vscode 停止评估用于发送到 args (`echo...`) 的命令。
作为目前不同的解决方法,我使用了以下方法,由于我使用 manage.py 的方式,这对我来说更容易一些。
我的配置如下所示:
{
"name": "Python: Django Debug Single Test",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"dtf",
"${relativeFile}"
],
"django": true
},
然后,就我而言,我在 manage.py 中添加了一些快捷方式来执行诸如“manage.py run”(而不是 runserver)或“manage.py tap”(而不是 --test --parallel 3 -- keepdb --settings=settings_tests) 等。所以我添加了另一个名为“dtf”(调试测试文件)的快捷方式,然后在实际运行命令之前获取相关文件并替换 argv 中的值。 它看起来像这样:
if 'dtf' in sys.argv:
logging.disable(logging.CRITICAL)
sys.argv.remove('dtf')
sys.argv.insert(1, 'test')
f = sys.argv[2].replace('.py', '')
f = '.'.join(f.split('/')[1:])
sys.argv[2] = f
sys.argv.append('--keepdb')
sys.argv.append('--settings=my_project.settings_tests')
print(sys.argv)
您可以在此处查看我在 manage.py 文件中使用的一些快捷方式:https ://gist.github.com/kalsky/0cba3618452238f3b00354a90d2a51e5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.