有没有办法使用 Node-inspector 来通过 Jest 调试单元测试?有时最好逐步查看测试失败的原因
我尝试了几种方法
node-debug jest --runInBand
首先启动检查器,例如
$ node-inspector
$ node --debug-brk .\node_modules\jest-cli --runInBand
然后导航到http://127.0.0.1:8080/debug?port=5858
我发现调试器偶尔(大约十分之一)会打开 jest src 文件并且可以调试它们。但通常情况下,调试器中的脚本仅包含“无域”文件夹和另一个不相关的文件夹。 此外,测试脚本本身永远不会加载到调试器中。
以前有人尝试过吗?
最佳答案
看起来问题是 jest
正在使用 harmonize
,它会生成一个子进程以确保使用 --harmony
选项.
harmonize/harmonize.js,第 30-35 行
var node = child_process.spawn(process.argv[0], ['--harmony'].concat(process.argv.slice(1)), {});
node.stdout.pipe(process.stdout);
node.stderr.pipe(process.stderr);
node.on("close", function(code) {
process.exit(code);
});
通过注释掉 jest 用于生成协调进程的代码,我能够成功调试 jest 测试(尽管 tests that use JSX transforms are incredibly slow )。
node_modules/jest-cli/bin/jest.js,文件的最后几行:
if (require.main === module) {
//harmonize(); <--- comment out
_main(function (success) {
process.exit(success ? 0 : 1);
});
}
然后你可以运行:
$ node-debug --nodejs --harmony ./node_modules/jest-cli/bin/jest.js --runInBand
Jest 依赖于 --harmony
标志,因此我们需要使用 --nodejs --harmony
将其添加回来。我们还添加 --runInBand
以便测试按顺序运行,而不是并行运行。
这将打开 Web 调试器,您可以调试测试,尽管达到您想要的测试可能会非常慢。如果有人知道加快速度的方法,请发表评论,我会更新我的答案。
您可以将其添加到您的 package.json
中,以便更轻松地启动:
...
scripts: {
"test": "jest",
"test-debug": "node-debug --nodejs --harmony ./node_modules/jest-cli/bin/jest.js --runInBand"
}
...
当然,这个解决方案主要关注的是jest
源代码的编辑。会考虑如何发出拉取请求来使这个坚持。
在此处创建了 Github 问题:https://github.com/facebook/jest/issues/152
关于node-inspector - 使用 node-inspector 调试 Jest 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142173/