Jest: 运行全局 `jest-cli` 应该警告而不是错误

创建于 2016-07-14  ·  3评论  ·  资料来源: facebook/jest

运行全局安装的 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.

没有明显的细节(“请运行...”这一行看起来不像是一条错误消息“),也没有失败的测试,所以调试很尴尬。

建议

  1. 我更愿意完全从getJest删除对 Jest 包本地版本的测试。 如果人们想在不运行npm install情况下使用非本地版本的 Jest,我不确定为什么包应该关心?
  2. 如果测试足够有用,那么它应该使用console.warn而不会影响退出代码,因为测试可能仍然没有问题地运行,并且警告足以表明输出可能无法准确反映用户的意图。
  3. 如果首选返回非零退出代码,测试应该抛出一个真正的Error以使调试更容易 - Node 的内置错误处理比console.error后跟process.exit(1)更加明确
  4. 如果您真的不想抛出错误,请立即调用process.exit(1)而不是等待所有测试运行 - 如果在缺少本地定义的依赖项时全局运行 Jest 是不合适的,那么它应该根本不跑。

最有用的评论

@mmcgahan @cpojer在纱线工作区 monorepo 的子包中运行 Jest 时,我看到了这个非致命错误。 感觉它可能被错误显示,因为您查找jest方式不是处理被提升到 monorepo 根的包?

所有3条评论

感谢您提出这个问题以及对问题的详细描述。 老实说,我自己也对这些东西感到不安,这肯定会让 Jest 的测试套件更难处理。

我也同意,如果 Jest 最终仍然运行测试,那么目前的工作方式没有任何意义。 很抱歉你在这上面浪费了时间。

你愿意发送拉取请求吗?

我的建议如下:

  • 删除process.exit(1)
  • 执行process.on('exit', () => console.log(chalk.red('The error message ')))以便我们在测试运行结束时收到一条漂亮的红色消息,告诉您某些事情不完全符合预期。

它将允许人们使用错误版本的 Jest(不推荐这样做,因为可能会有破坏性更改)但它仍然会正确完成测试运行并会在底部打印一条消息。 你怎么认为?

@cpojer这对我

@mmcgahan @cpojer在纱线工作区 monorepo 的子包中运行 Jest 时,我看到了这个非致命错误。 感觉它可能被错误显示,因为您查找jest方式不是处理被提升到 monorepo 根的包?

此页面是否有帮助?
0 / 5 - 0 等级