看起来问题在于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