3

如何将简单的节点 cli/repl 调试器与 Jest 一起使用?

Jest 文档使用node-inspector,但从 Node 6.3 开始它已过时/不推荐使用。无论如何,我在节点 7.7.4 上尝试了推荐的命令:

node --debug-brk ./node_modules/.bin/jest --runInBand --no-cache [your_test_file]

但这只是挂在以下(假设等待节点检查器):

(node:13452) DeprecationWarning: node --debug is deprecated. Please use node --inspect instead. Debugger listening on 127.0.0.1:5858

我按照警告的规定添加了,但即使这样,Chrome DevTools 中的语句--inspect也不会停止执行。debugger

对于一个非常简单的用例来说,这似乎过于复杂。

4

2 回答 2

4

我发现以下命令有效:

node debug ./node_modules/.bin/jest --runInBand --no-cache [your_test_file]

...但有一些古怪的行为。当调试器第一次停止时,您将看到:

break in node_modules/jest/bin/jest.js:10
  8  */
  9
>10 'use strict';
 11
 12 require('jest-cli/bin/jest');
debug>

显然,Jest 总是注入这个断点,这样你就有时间打开 Chrome DevTools(在我们的例子中不相关,因为我们只会使用 cli/repl)。

用 继续越过这个断点c,不久之后(当然没有任何迹象表明事情正在进展)你应该看到你的断点:

break in webpack/assets/react/components/presentation/Feed/Comments/Comment/commentSpec.jsx:12
 10     var wrapper = (0, _enzyme.shallow)(_react2.default.createElement(_comment2.default, { loading: true }));
 11
>12     debugger;
 13     expect(wrapper.find(_button2.default)).to.have.length(1);
 14   });
 debug>

最后一件奇怪的事情是您需要键入 repl 来检查对象,如Node DebuggerInspecting variables using node's built-in debugger 中所述?

在阅读文档时,所有这些步骤的组合对我来说并不是很明显,所以我希望这个答案可以帮助某人更快地克服障碍。

于 2017-03-23T16:20:17.663 回答
2

从节点 v8.4 开始,debugger代码中的关键字针对 VM 上下文是固定的。请参阅此 git 评论

1.在您的 Jest 代码中键入debugger关键字

describe('Testcase definition', () => {
   it('should be defined with subobjects', () => {
     debugger; // <-- This keyword breaks on Chrome inspect
     expect(true).toBe(true);
   });
});
  1. 运行命令:

    节点 --inspect-brk --inspect ./node_modules/.bin/jest -i tests/mytest.test.js

  2. 现在在 Chrome 上打开 chrome://inspect/#devices。瞧!

于 2017-12-09T19:34:44.173 回答