我最近从Vim切换到VSCode,我正在尝试为通过docker运行的jest测试设置VSCode调试。
调试工作。。。某种程度上。如果我想运行jest测试并激活断点,我需要:
vscode-jest测试
下面的launch.json任务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
大半天后,明白了。
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端口。
这是我的发布会。使用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运行和调试。
这是我的解决方案,主要来自你的同一个问题。谢谢你的提问:)
首先在监视模式下启动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