Ron*_*Ron 37 node-inspector jestjs
有没有办法使用节点检查器来使用Jest调试单元测试?有时可以逐步查看测试失败的原因
我尝试了几种方法
node-debug jest --runInBand
Run Code Online (Sandbox Code Playgroud)
从以及首先启动检查员,例如
$ node-inspector
$ node --debug-brk .\node_modules\jest-cli --runInBand
Run Code Online (Sandbox Code Playgroud)
然后导航到 http://127.0.0.1:8080/debug?port=5858
我偶尔发现(10次左右),调试器打开jest src文件,可以调试它们.但一般来说,调试器中的脚本只包含"无域"文件夹和另一个不相关的文件夹.此外,测试脚本本身永远不会在调试器中加载.
有人曾尝试过这个吗?
Sea*_*son 16
看起来jest正在使用的问题是harmonize,它会生成子进程以确保使用该--harmony选项.
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);
});
Run Code Online (Sandbox Code Playgroud)
我能够成功地调试jest测试(尽管使用JSX转换的测试非常慢),通过注释掉jest用来产生协调过程的代码.
if (require.main === module) {
//harmonize(); <--- comment out
_main(function (success) {
process.exit(success ? 0 : 1);
});
}
Run Code Online (Sandbox Code Playgroud)
然后你可以运行:
$ node-debug --nodejs --harmony ./node_modules/jest-cli/bin/jest.js --runInBand
Run Code Online (Sandbox Code Playgroud)
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"
}
...
Run Code Online (Sandbox Code Playgroud)
当然,这个解决方案的主要问题是编辑jest源代码.将考虑如何提出拉动请求来实现这一点.
在这里创建了Github问题:https://github.com/facebook/jest/issues/152
Dan*_*mov 14
现在,Node> = 6.3正式支持此功能.
引用Jest文档:
debugger;在任何测试中放置一个语句,然后在项目的目录中运行:Run Code Online (Sandbox Code Playgroud)node --debug-brk --inspect ./node_modules/.bin/jest -i [any other arguments here]这将输出您可以在Chrome中打开的链接.打开该链接后,将显示Chrome开发者工具,并在Jest CLI脚本的第一行设置断点(这样做只是为了让您有时间打开开发人员工具并防止Jest在您执行之前执行有时间这样做).单击屏幕右上角看起来像"播放"按钮的按钮以继续执行.当Jest执行包含该
debugger语句的测试时,执行将暂停,您可以检查当前范围和调用堆栈.注意:
-icli选项可确保Jest在同一进程中运行测试,而不是为单个测试生成进程.通常,Jest会跨进程并行化测试运行,但很难同时调试多个进程.有关V8检查器的更多信息,请访问:https://nodejs.org/api/debugger.html#debugger_v8_inspector_integration_for_node_js
使用 Node 7.4.0、Jest 18.x 和jest-environment-node-debug包(来自此评论),现在可以使用 chrome devtools 来调试 Jest 测试:
$ npm install -D jest-environment-node-debug
$ node --inspect-brk ./node_modules/.bin/jest -i --env jest-environment-node-debug
Run Code Online (Sandbox Code Playgroud)