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)
但它什么也没做,连接仍然存在,并且笑话错误消息仍然存在。我知道我可以将其添加--forceExit到jest命令中,但这并不能解决任何问题,它只是将问题隐藏起来。
小智 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