当前位置: 首页 > 知识库问答 >
问题:

VSCode新手:通过Docker进行远程Jest/节点调试

百里阳平
2023-03-14

我最近从Vim切换到VSCode,我正在尝试为通过docker运行的jest测试设置VSCode调试。

调试工作。。。某种程度上。如果我想运行jest测试并激活断点,我需要:

  1. 插入断点
  2. 开始运行相关的jest测试通过vscode-jest测试下面的launch.json任务
  3. 在测试套件到达断点之前快速执行Docker:附加到节点

显然不理想-我希望确保VSCode在运行vscode-jest-test时自动附加到调试器。简而言之:在通过Docker运行Jest测试时,有没有一种简单的方法来附加VSCode调试器?

这是我目前的发布会。json和包。json文件。非常感谢您的帮助:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Docker: Attach to Node",
      "port": 9229,
      "address": "localhost",
      "localRoot": "${workspaceFolder}",
      "remoteRoot": "/www",
      "protocol": "inspector"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "vscode-jest-tests",
      "runtimeExecutable": "npm",
      "runtimeArgs": [ "run", "test:debug" ],
      "address": "127.0.0.1",
      "port": 9229,
      "breakOnLoad": true,
      "restart": true,
      "timeout": 10000,
      "localRoot": "${workspaceFolder}",
      "remoteRoot": "/www",
      "outFiles": [
        "${workspaceFolder}/dist/**/*.js"
      ],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen"
    }
  ]
}
#...
"scripts": {
  "test:debug": "docker exec -it kiva_api node --nolazy --inspect-brk=0.0.0.0:9229 node_modules/.bin/jest --runInBand --config=test/jest-e2e.json"
}
#...

PS:如果我从命令行运行npm run test:debug

共有3个答案

贺栋
2023-03-14

大半天后,明白了。

VSCode启动。json

{
  "type": "node",
  "name": "docker-jest",
  "request": "attach",
  "address": "0.0.0.0",
  "port": 9229,
  "localRoot": "${workspaceFolder}",
  "remoteRoot": "/app", // Will depend on your setup
  "skipFiles": [
    "<node_internals>/**/*.js",
    "${workspaceFolder}/node_modules/**/*.js"
  ],
  "internalConsoleOptions": "neverOpen",
  "presentation": {
    "reveal": "silent"
  }
},

确保docker容器在端口9229打开的情况下运行。我使用tail-d/dev/null来保持我的运行。我不会详细介绍docker设置,因为有很多关于这个主题的在线资源。

然后进入docker容器

$ docker exec -it container_name /bin/bash

然后跑

$ node --inspect-brk=0.0.0.0:9229 --nolazy -r ./node_modules/ts-node/register ./node_modules/jest/bin/jest.js --config=./jest-config.json --runInBand

--runInBand标志是这个工作的关键。

--runInBand使所有测试都在父进程而不是子进程中运行。

你应该看到

root@7a0ba832e7f9:/app# node --inspect-brk=0.0.0.0:9229 --nolazy -r ./node_modules/ts-node/register ./node_modules/jest/bin/jest.js --config=./jest-config.json --runInBand
Debugger listening on ws://0.0.0.0:9229/267bfe8c-dfa8-45e0-a86c-abcadbd97bea
For help, see: https://nodejs.org/en/docs/inspector

在笑话中设置断点。spec.ts文件并执行docker jest调试器。

如果仍然存在问题,请确保应用程序未在同一端口上以调试模式运行。测试将继续执行,仅短暂暂停,显示以下内容:;

Starting inspector on 0.0.0.0:9229 failed: address already in use

如果发生这种情况,只需将节点命令和launch.json中使用的调试端口更改为其他端口并打开docker端口。

毛德华
2023-03-14

这是我的发布会。使用Docker调试Jest测试的json配置。

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "name": "Docker: Jest Tests",
      "request": "launch",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": [
        "--runInBand"
      ],
      "cwd": "${workspaceFolder}",
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "disableOptimisticBPs": true,
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      },
      "protocol": "inspector"
    }
  ]
}

想法是启动docker compose,包括一个数据库(Postgres、MongoDB等)和一个api应用程序,然后通过VSCode运行和调试。

阳航
2023-03-14

这是我的解决方案,主要来自你的同一个问题。谢谢你的提问:)

首先在监视模式下启动jest--watchAll),这样进程保持活动状态。(在代码片段中,我假设一个后端容器通过docker compose运行,端口9229暴露在主机上)

docker-compose exec backend \
  node --inspect=0.0.0.0:9229 -r tsconfig-paths/register -r ts-node/register \
  node_modules/.bin/jest --watchAll --runInBand 

现在在VSCode. vscode/launch.json配置中添加一个要附加到正在运行的进程的配置。注意:确保Remote teRoot适合您的设置。

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
        "type": "node",
        "request": "attach",
        "name": "Docker: Debug tests",
        "address": "127.0.0.1",
        "port": 9229,
        "trace": true,
        "restart": true,
        "timeout": 10000,
        "localRoot": "${workspaceFolder}",
        "remoteRoot": "/app",
        "outFiles": [
            "${workspaceFolder}/dist/**/*.js"
        ],
        "disableOptimisticBPs": true,            
        "internalConsoleOptions": "neverOpen",
        "continueOnAttach": true,
    }]
}

从这里开始,我已经能够正确地开发和调试我的代码。

 类似资料:
  • > 停止防火墙服务: 服务firewall_service停止 将进程附加到gdbserver 当我尝试通过在主机框上运行'target remote remote_ip:remote_port'来启动主机上的调试时,我得到一个'connection timedout'错误。 你们能看到我做错了什么吗,任何需要检查的东西,或者通过ssh远程调试的替代方法吗?我将不胜感激。谢谢

  • 我正在测试VS Code节点调试器,但是当试图附加到正在运行的进程时,我找不到任何节点进程。 这是我的launch.json文件: 我package.json文件的内容: 使用“npm start”启动进程后,我按“start debug”,节点进程列表如下: 1 sssd_pam 看起来像这样,但这些都不是我刚刚启动的服务器。即使在我关闭节点服务器后,此列表仍然存在。 为什么我无法在VSCode

  • 我有: VSCode v1.46.0 远程wsl扩展v0.44.3 Windows 10操作系统内部版本号19041.329 Docker 桌面版 v2.3.0.3 我试图在docker桌面wsl中打开VSCode,每次都会出现以下错误。我已经转到列出的目录,看到了节点文件,我不知道该怎么办?

  • 我正在使用VSCode jest运行程序。https://github.com/firsttris/vscode-jest-runner/。当我在测试用例上点击调试时,输出是这样的: FAIL service/servicenameA/handler.test.js●测试套件无法运行 测试套件:1次失败,1次总测试:0次总快照:0次总时间:7.788秒 我的玩笑。配置。js如下所示: //开玩笑。

  • 1. 在 VSCode 中打开一个 Electron 工程。 1 $ git clone [email protected]:electron/electron-quick-start.git 2 $ code electron-quick-start Copied! 2. 使用以下配置添加一个文件 .vscode / launch.json: 1 { 2 "version": "0.2.0",

  • 1.在 VSCode 中打开一个 Electron 项目。 $ git clone git@github.com:electron/electron-quick-start.git $ code electron-quick-start 1. Open an Electron project in VSCode. $ git clone git@github.com:electron/electr