看起来问题在于
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测试(尽管
使用JSX转换的测试非常缓慢),方法是注释掉jest用来生成harmonized进程的代码。
node_modules/jest-cli/bin/jest.js,文件的最后几行:
if (require.main === module) {
_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源代码。我会考虑如何提交pull request以使其生效。
在这里创建了Github Issue:
https://github.com/facebook/jest/issues/152。
Proxy
,但我认为如果没有手动添加--harmony
标志,它对我来说不起作用,但最近我还没有尝试过。如果我可以验证它在没有猴子补丁的情况下工作,我会更新这个答案。 - Sean Adkinson