【问题标题】:Jest tests leaking due to improper teardown因拆解不当而导致 Jest 测试泄漏
【发布时间】:2021-07-03 22:16:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: node.js testing redis jestjs bull


    【解决方案1】:

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

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

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

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

    import { redis } from "redis_file_path";
    
    afterAll(async () => {
        await redis.quit();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-03
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多