debugging 在VS程式码中两柴Jest测试:断点移动

puruo6ea  于 2022-11-24  发布在  Jest
关注(0)|答案(3)|浏览(158)

在 * VS-Code * 中调试 * Jest * 测试时,只要启动调试器,断点就会移动几行。
我使用正式的recommended configuration和普通的JavaScript(而不是Babel)。
我认为这与源代码Map有关。在配置中设置"sourceMaps": false使我的断点不再移动,而是将"真正的"源代码移动了几行。

    • 最小示例:**

第一个
现在,如果您在const x = 15处设置断点,您将看到它在调试会话期间转换为expect(funTest(5)).toBe(9)

    • 所用软件**VS代码:1.27.0,无扩展;笑话:23.5.0;节点:8.10.0; Ubuntu Linux操作系统16.04
iugsix8n

iugsix8n1#

我自己找到了“解决方案”。添加一个.babelrc文件到您的根文件夹中,其中包含以下内容:

{
  "sourceMap": "inline",
  "retainLines": true
}

然后问题就解决了。
尽管我没有特别使用巴别塔,但VS Code多少会使用。

cngwdvgl

cngwdvgl2#

将以下内容添加到launch.json中的vscode-jest-tests配置中:

{
  "disableOptimisticBPs": true
}

这对我和several other people都有效。

bgtovc5b

bgtovc5b3#

这是一个长期存在的问题,寻找解决方案会导致旧的或错误的答案,比如添加“disableOptimisticBP:true”,它已不再被支持。我甚至找不到一个说明它被删除以及原因的注解。
这里的主要问题显然是源代码Map。由于某些原因,生成的源代码Map与实际的TS代码不匹配。对我来说,甚至正常代码中的断点都不起作用(测试代码之外)。但在另一个项目中,我有一个工作的Mocha配置,这最终给我带来了一个解决方案。
你不需要ts-jest来调试!它是整个麻烦的罪魁祸首,它不仅让我浪费了几天时间,寻找解决方案。相反,让tsc生成你的JS代码然后给Jest一个JS文件的路径,而不是TS文件。VS代码将自动找到sidecar源Map,并与您一起通过您的TS代码就好了。
作为调试当前规范文件的启动配置,请使用:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Run current Jest test",
            "runtimeExecutable": null,
            "runtimeArgs": [
                "--inspect-brk",
                "${workspaceRoot}/node_modules/.bin/jest",
                "--runInBand",
                "${fileBasenameNoExtension}.js",
            ],
            "console": "integratedTerminal",
            "stopOnEntry": false,
            "preLaunchTask": "tsc",
            "outFiles": [
                "${workspaceFolder}/output/src/**/*.js"
            ],
            "env": {
                "NODE_ENV": "testing"
            }
        }
    ]
}

这需要一个任务来运行TS编译器:

{
    "version": "2.0.0",
    "tasks": [
        {
            "command": "tsc",
            "label": "tsc",
            "type": "shell",
            "args": [
                "-w",
                "-p",
                "."
            ],
            "isBackground": true,
            "problemMatcher": "$tsc-watch",
            "presentation": {
                "echo": true,
                "reveal": "silent",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            }
        }
    ]
}

其在第一次测试调试运行时构建所有文件,然后监视TS文件中的任何改变,并立即重新编译那些改变。
现在,选择任意一个spec文件,设置一个断点(也可以在源代码中设置),然后开始调试。

相关问题