由于拆解不当导致 Jest 测试泄漏

问题描述 投票:0回答:2

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

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

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

node.js testing redis jestjs bull
2个回答
46
投票

按照警告中的建议,将

--detectOpenHandles
选项添加到 package.json 文件中 jest 的脚本中:

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

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

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

import { redis } from "redis_file_path";

afterAll(async () => {
    await redis.quit();
});

0
投票

就我而言,问题是

mongoose.connect()
我只是嘲笑猫鼬连接

import { app } from "../src/index";
import request from "supertest";

jest.mock('mongoose')

describe("routes", () => {
  it("should pass", async () => {
    const response = await request(app).get("/hello");
  });
});
© www.soinside.com 2019 - 2024. All rights reserved.