我遇到了一个问题,在VS Code for Node.js中启动调试会话后,断点移动到与设置断点的位置完全不同的行。
之前:
之后:
正如您所看到的,断点从第15和18行移动到了第6和10行。
我想这可能是由于我的源Map或其他什么问题(因为我使用的是TypeScript),但我使用了源Map可视化来验证我的源Map,一切看起来都很正常。
我还认为这可能与VS代码运行程序有关,所以我尝试在我的终端中运行node --inspect-brk node_modules/.bin/jest --runInBand
,并将其附加到VS代码中的进程。
我在用Jest做测试。
如果我只在Jest测试本身中设置断点,似乎也会出现同样的问题;但是,如果我在源文件和Jest测试中设置断点,Jest测试断点似乎不会移动。
我已经阅读了在VS代码中调试的Jest故障排除页面,并正确地遵循了步骤(确保我使用的是runInBand
等)。
我还尝试将outFiles
选项添加到VS Code launch.json文件中,以指向dist
文件夹中的所有文件,但这样做的副作用是修改了测试文件,而且无论如何问题仍然存在,因此没有帮助。
我还尝试在launch.json文件中将smartStep
设置为true,但没有什么不同。
你可以找到我在debuggingBreakpointFix
branch of dynamoose上使用的代码。一个简单的npm install
,然后设置一些断点,并在VS代码中运行Debug Jest Tests
,应该足以重现这个问题。
1条答案
按热度按时间nbnkbykc1#
我也遇到了同样的问题,被这个问题困了几个小时。
OP也在GitHub上发布了这个问题,并在那里得到了一个工作答案:
这是因为Babel正在转换脚本并重写其源Map,而我们已经在磁盘上看到了编译后的文件并从中设置了源Map,两个文件(虚拟转换后的版本和磁盘上的版本)存在于相同的路径中,因此我们在所有候选位置设置了断点,这导致了您所看到的行为。
我建议您调整测试设置,这是在Jest中使用TypeScript的推荐方法,它不需要任何额外的配置即可工作:https://jestjs.io/docs/getting-started#using-typescript
或者,为了避免转换已经编译好的代码并解决这个问题,可以将以下代码添加到
jest.config.js
:如果修改jest设置不是一个选项,这应该足够了!(这是我遇到的情况,因为我正在为OSS项目的一个特性工作,该项目已经有了测试基础设施,并且不希望彻底检查)