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