node-inspector - 使用 node-inspector 调试 Jest 测试用例

标签 node-inspector jestjs

有没有办法使用 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/

相关文章:

javascript - 用于输入的 Puppeteer 方法永远不会完成输入传递给它们的完整字符串

javascript - V8 延迟生成堆栈跟踪似乎导致 vows 库中的无限循环

node.js - 如果没有指定端口, Node 检查器将无法工作

javascript - 在 Heroku 上交互式调试 Node.js 应用程序?

node.js - 如何真正调试node.js应用程序?

javascript - 开 Jest ,用不同的参数模拟同一个函数两次

javascript - 将 Node 检查器与 Grunt 任务一起使用

vue.js - Jest/Vue test utils - 来自子组件作用域插槽的方法 - [Vue warn] : Invalid handler for event "click": got undefined

javascript - 使用 Jest 对 ES7 React 组件进行单元测试

javascript - 使用 Jest 响应 js 测试 bool 属性