升级到最新版本时出现玩笑错误 - 工作进程未能正常退出

Vis*_*ati 10 reactjs jestjs

我最近将 Jest 包从 v24 更新到了最新版本,并在运行单元测试时,我在测试套件运行结束时得到了以下信息:

A worker process has failed to exit gracefully and has been force exited. 
This is likely caused by tests leaking due to improper teardown.
Try running with --runInBand --detectOpenHandles to find leaks.
Run Code Online (Sandbox Code Playgroud)

我添加了--detectOpenHandles测试命令,并且消息将在下次运行中出现。我不确定如何看待它,因为 detectorOpenHandles 的目的是查找打开的句柄而不是修复它,所以下次运行时该消息如何不会出现,并且没有其他消息来指导我可能出现的问题。

有人遇到过类似的行为吗?补充一下,我现在使用的是最新版本的 Jest ie 27.2.0。

小智 6

根据我的研究,错误发生在以下情况:

  • 异步函数未完成
  • Promise 函数未完成
  • Websocket、数据库或具有连接/断开连接方法的任何其他内容在测试结束前未断开连接

该错误没有提到这样一个事实:即使有标志,测试在大多数情况下也会挂起--detectOpenHandles,这可能就是您看不到任何有用的调试消息的原因。

从文档中:

尝试收集并打印打开的句柄,以防止 Jest 干净退出。--forceExit如果您需要使用Jest 退出以找出可能的原因,请使用此选项。这意味着 - -runInBand,使测试串行运行。使用 async_hooks 实现,因此它仅适用于 Node 8 及更高版本。此选项会显着降低性能,只能用于调试。

--detectOpenHandles正如文档中所述,您可以尝试使用和标志运行测试--forceExit。这意味着测试将串行运行,并且当测试由于不正确的拆卸而未完成时,每个测试将强制退出。让我知道这个是否奏效。