在使用 Jest 进行测试时,我收到一条警告:“工作进程未能正常退出并已被强制退出。这可能是由于拆卸不当导致测试泄漏造成的。尝试使用 --detectOpenHandles 运行以查找泄漏。”我意识到这是因为我使用 Bull https://github.com/OptimalBits/bull 的函数之一,它使用 Redis。因此,当将任务添加到队列时,会导致此警告。我使用默认的 Bull 配置(无配置)。我确实有一个 Jest 使用的队列上的添加函数的模型,但是它没有帮助。
const notificationQueue = {
add: jest.fn().mockImplementation((data: any, opts?: JobOptions) => {}),
};
我想知道是否有办法避免此警告。如果它有助于我在内存中使用 mongo 进行测试,但 redis 是一个实际的。作为旁注,当我单独运行每个测试套件时,只有当我运行所有测试时,我才没有看到此警告。
按照警告中的建议,将
--detectOpenHandles
选项添加到 package.json 文件中 jest 的脚本中:
"scripts": {
"test": "jest --watchAll --detectOpenHandles"
}
不要忘记停止然后启动服务器!
无论您遇到什么问题,该解决方案都可以解决。但是,根据您的情况,您的问题来自redis连接。 测试结束需要关闭redis:
import { redis } from "redis_file_path";
afterAll(async () => {
await redis.quit();
});
就我而言,问题是
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");
});
});