看起来问题在于jest
using harmonize
,它会产生一个子进程以确保使用该--harmony
选项。
协调/协调.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 测试(尽管使用 JSX 转换的测试非常慢)。
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