运行全局安装的 Jest 版本时触发的process.exit(1)
调用会导致奇怪的测试结果 - 即使所有测试都通过,该过程也会返回一个非零退出代码,并且目前尚不清楚原因。
当jest
被分配给npm test
(这是一个很常见的约定)时,你会得到:
Please run `npm install` to use the version of Jest intended for this project.
...
163 tests passed (163 total in 30 test suites, run time 3.292s)
npm ERR! Test failed. See above for more details.
没有明显的细节(“请运行...”这一行看起来不像是一条错误消息“),也没有失败的测试,所以调试很尴尬。
建议
getJest
删除对 Jest 包本地版本的测试。 如果人们想在不运行npm install
情况下使用非本地版本的 Jest,我不确定为什么包应该关心?console.warn
而不会影响退出代码,因为测试可能仍然没有问题地运行,并且警告足以表明输出可能无法准确反映用户的意图。Error
以使调试更容易 - Node 的内置错误处理比console.error
后跟process.exit(1)
更加明确process.exit(1)
而不是等待所有测试运行 - 如果在缺少本地定义的依赖项时全局运行 Jest 是不合适的,那么它应该根本不跑。感谢您提出这个问题以及对问题的详细描述。 老实说,我自己也对这些东西感到不安,这肯定会让 Jest 的测试套件更难处理。
我也同意,如果 Jest 最终仍然运行测试,那么目前的工作方式没有任何意义。 很抱歉你在这上面浪费了时间。
你愿意发送拉取请求吗?
我的建议如下:
process.exit(1)
。process.on('exit', () => console.log(chalk.red('The error message ')))
以便我们在测试运行结束时收到一条漂亮的红色消息,告诉您某些事情不完全符合预期。它将允许人们使用错误版本的 Jest(不推荐这样做,因为可能会有破坏性更改)但它仍然会正确完成测试运行并会在底部打印一条消息。 你怎么认为?
@cpojer这对我
@mmcgahan @cpojer在纱线工作区 monorepo 的子包中运行 Jest 时,我看到了这个非致命错误。 感觉它可能被错误显示,因为您查找jest
方式不是处理被提升到 monorepo 根的包?
最有用的评论
@mmcgahan @cpojer在纱线工作区 monorepo 的子包中运行 Jest 时,我看到了这个非致命错误。 感觉它可能被错误显示,因为您查找
jest
方式不是处理被提升到 monorepo 根的包?