繁体   English   中英

如何在 vscode 中调试单个 Django 测试?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM