如何将节点调试 cli 与 Jest 一起使用?
How do I use node debug cli with Jest?
如何将简单的节点 cli/repl 调试器与 Jest 一起使用?
Jest documentation uses node-inspector,但从 Node 6.3 开始是 outdated/deprecated。无论如何,我在 Node 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
我按照警告的说明添加了 --inspect
,但即便如此,执行也不会在 Chrome DevTools 中的 debugger
语句上停止。
对于一个非常简单的用例来说,这似乎过于复杂。
我发现以下命令有效:
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 Debugger and Inspecting variables using node's built-in debugger?
中所述
在阅读文档时,所有这些步骤的组合对我来说并不是很明显,所以我希望这个答案能帮助人们更快地克服障碍。
从节点 v8.4 开始,代码中的 debugger
关键字针对 VM 上下文进行了修复。参考 this git comment.
1.在你的 Jest 代码中输入 debugger 关键字:
describe('Testcase definition', () => {
it('should be defined with subobjects', () => {
debugger; // <-- This keyword breaks on Chrome inspect
expect(true).toBe(true);
});
});
命令运行:
node --inspect-brk --inspect ./node_modules/.bin/jest -i tests/mytest.test.js
现在 chrome://inspect/#devices Chrome 开放。瞧!
如何将简单的节点 cli/repl 调试器与 Jest 一起使用?
Jest documentation uses node-inspector,但从 Node 6.3 开始是 outdated/deprecated。无论如何,我在 Node 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
我按照警告的说明添加了 --inspect
,但即便如此,执行也不会在 Chrome DevTools 中的 debugger
语句上停止。
对于一个非常简单的用例来说,这似乎过于复杂。
我发现以下命令有效:
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 Debugger and Inspecting variables using node's built-in debugger?
中所述在阅读文档时,所有这些步骤的组合对我来说并不是很明显,所以我希望这个答案能帮助人们更快地克服障碍。
从节点 v8.4 开始,代码中的 debugger
关键字针对 VM 上下文进行了修复。参考 this git comment.
1.在你的 Jest 代码中输入 debugger 关键字:
describe('Testcase definition', () => {
it('should be defined with subobjects', () => {
debugger; // <-- This keyword breaks on Chrome inspect
expect(true).toBe(true);
});
});
命令运行:
node --inspect-brk --inspect ./node_modules/.bin/jest -i tests/mytest.test.js
现在 chrome://inspect/#devices Chrome 开放。瞧!