15

在使用 Jest 进行测试时,我收到一条警告说“工作进程未能正常退出并已被强制退出。这可能是由于不正确的拆卸导致测试泄漏造成的。尝试使用 --detectOpenHandles 运行以查找泄漏。” 我意识到这是因为在其中一个函数中我使用了使用 Redis的 Bull https://github.com/OptimalBits/bull 。因此,将任务添加到队列时会导致此警告。我使用默认的 Bull 配置(无配置)。我确实有一个 Jest 使用的队列上的 add 函数的模型,但是它没有帮助。

const notificationQueue = {
  add: jest.fn().mockImplementation((data: any, opts?: JobOptions) => {}),
};

我想知道是否有办法避免这个警告。如果它有助于我在内存中使用 mongo 进行测试,但 redis 是一个实际的。作为一个旁注,当我单独运行每个测试套件时,我没有看到这个警告,只有当我运行所有测试时。

4

1 回答 1

22

正如警告中所建议的,--detectOpenHandles在 package.json 文件中的 jest 脚本中添加选项:

"scripts": {
    "test": "jest --watchAll --detectOpenHandles"
  }

不要忘记停止然后启动服务器!

无论您遇到什么问题,此解决方案都可以解决。但是,根据您的情况,您的问题来自redis 连接您需要在测试结束时关闭 redis

import { redis } from "redis_file_path";

afterAll(async () => {
    await redis.quit();
});
于 2021-05-15T22:55:32.030 回答