繁体   English   中英

如何在激活断点的 Visual Studio Code 中调试 NodeJS start-server-and-test Jest 测试

[英]How to Debug NodeJS start-server-and-test Jest Tests in Visual Studio Code with Breakpoints Activating

是否有人使用start-server-and-test设法使用从Visual Studio Code中激活的断点来调试他们的测试 我正在使用start-server-and-test来启动docker-compose堆栈。 一旦 docker-compose 堆栈成功启动,Jest 测试就会开始运行。

我可以在终端 session 中成功运行它。 但是,如果可能的话,我想从VSCode中的 launch.json 触发它,并能够在断点处停止。 我尝试了以下launch.json配置项:

 {
            "name": "Debug e2e tests",
            "type": "node",
            "request": "launch",
            "cwd": "${workspaceRoot}",
            "program": "${workspaceRoot}/node_modules/.bin/start-server-and-test",
            "args": [
                "docker-compose -f ./tests/docker/docker-compose.yml up",
                "http://localhost:8080/ping",
                "${workspaceRoot}/node_modules/.bin/jest -i --config=./tests/e2e/jest.config.js"
            ],
            "runtimeArgs": [
                "--inspect-brk"
            ],
            "protocol": "inspector",
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen"
}

这将启动 docker-compose 堆栈,然后测试开始在 VSCode 中的集成终端 session 中运行。 但是,在 VSCode 中没有遇到断点。

VSCode 运行调试器时会生成以下命令:

/usr/local/bin/node --inspect-brk=44745 node_modules/.bin/start-server-and-test "docker-compose -f ./tests/docker/docker-compose.yml up" http://localhost:8080/ping "/Users/simon/Development/Projects/ObjectDetection_Mqtt_Plugin/node_modules/.bin/jest -i --config=./tests/e2e/jest.config.js"

如果我尝试从终端 session 中运行 e2e 测试脚本,则测试将在 docker-compose 堆栈成功启动后按预期开始运行:

# package.json extract to include script for running e2e tests
"scripts": {
     "test:e2e": "start-server-and-test 'docker-compose -f ./tests/docker/docker-compose.yml up' http://localhost:8080/ping 'jest --config=./tests/e2e/jest.config.js'",
}

# run the e2e tests 
yarn run test:e2e

也试过这个:

 {
            "name": "Debug node script",
            "type": "node",
            "request": "launch",
            "runtimeExecutable": "yarn",
            "runtimeArgs": [
                "run",
                "vscode"
            ],
            "restart": true,
            "port": 9229,
            "protocol": "inspector",
            "cwd": "${workspaceFolder}",
            "console": "integratedTerminal",
            "disableOptimisticBPs": true,
            "internalConsoleOptions": "neverOpen"
}

使用此脚本:

"vscode": "start-server-and-test 'docker-compose -f ./tests/docker/docker-compose.yml up' http://localhost:8080/ping 'node --inspect-brk ./node_modules/.bin/jest --config=./tests/e2e/jest.config.js'"

结果一样...

最终使用此设置使其正常工作:

 {
            "name": "Debug e2e tests",
            "type": "node",
            "request": "launch",
            "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/start-server-and-test",
            "runtimeArgs": [
                "docker-compose -f ./tests/docker/docker-compose.yml up",
                "http://localhost:8080/ping",
                "node --inspect-brk=9239 --title=Jest-e2e-tests ${workspaceRoot}/node_modules/.bin/jest -i --config=./tests/e2e/jest.config.js"
            ],
            "port": 9239,
            "protocol": "inspector",
            "cwd": "${workspaceFolder}",
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "disableOptimisticBPs": true
}

我的方法是将runtimeExecutable设置为 start-server-and-test 并使用 arguments 初始化runtimeArgs数组以进行 start-server-and-test。 start-server-and-test的 test 参数使用--inspect-brk=9239参数生成一个节点进程,以允许附加 VSCode 调试器。 此外,这需要明确设置port VSCode 调试器选项。

如果子进程是由端到端测试产生的,则需要添加autoAttachChildProcesses选项并确保派生子进程的代码检测是否在检查模式下运行。 如果是,那么它将向父级添加具有不同端口的检查参数集,因此不会发生冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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