使用 NestJS 队列时关闭 Redis 连接

zza*_*res 6 testing redis jestjs ioredis nestjs

我正在尝试在 NestJS 项目中设置 E2E 测试,但是,jest 输出如下所示:

Jest did not exit one second after the test run has completed
Run Code Online (Sandbox Code Playgroud)

经过大量阅读后,这是因为有一些资源尚未释放,经过一些调试后,发现有一个打开的redis连接,由NestJSioredis使用bull该连接创建任务队列处理。问题是我在测试代码中没有对连接的引用,那么如何关闭它呢?afterAll我正在像这样拆除笑话钩子中的 Nest 应用程序:

  afterAll(async () => {
    await app.close();
  });
Run Code Online (Sandbox Code Playgroud)

但它什么也没做,连接仍然存在,并且笑话错误消息仍然存在。我知道我可以将其添加--forceExitjest命令中,但这并不能解决任何问题,它只是将问题隐藏起来。

小智 3

这花了我一段时间才弄清楚。您需要在 afterAll 挂钩中关闭该模块。我通过查看 NestJS Bull 存储库中的测试发现了这一点。

describe('RedisTest', () => {
  let module: TestingModule;
  beforeAll(async () => {

    module = Test.createTestingModule({
      imports: [
        BullModule.registerQueueAsync({
          name: 'test2',
        }),
      ],

    });
  });

  afterAll(async () => {
    await module.close();
  });
});
Run Code Online (Sandbox Code Playgroud)

https://github.com/nestjs/bull/blob/master/e2e/module.e2e-spec.ts