【问题标题】:How to Debug NodeJS start-server-and-test Jest Tests in Visual Studio Code with Breakpoints Activating如何在激活断点的 Visual Studio Code 中调试 NodeJS start-server-and-test Jest 测试
【发布时间】:2020-09-27 17:30:42
【问题描述】:

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

我可以在终端会话中成功运行它。但是,如果可能,我想从 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 的集成终端会话中运行。但是,在 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"

如果我尝试从终端会话中运行 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'"

同样的结果...

【问题讨论】:

    标签: node.js visual-studio-code jestjs


    【解决方案1】:

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

     {
                "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 并使用 start-server-and-test 的参数初始化 runtimeArgs 数组。 start-server-and-test 的 test 参数生成一个带有 --inspect-brk=9239 参数的节点进程,以允许附加 VSCode 调试器。此外,这需要显式设置 port VSCode 调试器选项。

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

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2023-03-09
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      相关资源
      最近更新 更多