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

fdbelqdn  于 2023-05-01  发布在  Go
关注(0)|答案(5)|浏览(159)

我添加了一个启动配置,允许我在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

ycggw6v2

ycggw6v21#

如果您使用的是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命令将相对路径中的/转换为.

aoyhnmkz

aoyhnmkz2#

如果你使用的是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
    },
eqoofvh9

eqoofvh93#

没有将文件路径转换为点名称,因此您需要在launch.json中硬编码。

9rbhqvlz

9rbhqvlz4#

这适用于我在wsl ubuntu下的windows与您的 www.example.com 作为打开文件:

{
    "name": "Test Django",
    "type": "python",
    "request": "launch",
    "python": "${workspaceFolder}/../.venv/bin/python",
    "program": "${workspaceFolder}/manage.py",
    "args": [
        "test",
        "${relativeFileDirname}"
    ],
    "django": true
},

我觉得你不需要什么回音|tr ... fileBasenameNoExtension etc.

fae0ux8s

fae0ux8s5#

对于较新版本的vscode,正如其中一条注解中提到的,vscode停止了对用于发送到args的命令(echo...).
作为一个不同的解决方案,我使用了下面的方法,这对我来说稍微容易一些,因为我是如何使用管理的。py。
我的配置看起来像这样:

{
        "name": "Python: Django Debug Single Test",
        "type": "python",
        "request": "launch",
        "program": "${workspaceFolder}/manage.py",
        "args": [
            "dtf",
            "${relativeFile}"
        ],
        "django": true
    },

然后,在我的例子中,我添加了一些快捷方式到我 www.example.com 。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)

你可以看看我在www. example中使用的一些快捷方式 www.example.com 的com文件:https://gist.github.com/kalsky/0cba3618452238f3b00354a90d2a51e5

相关问题