迁移至Jest 26后NestJS测试出现句柄泄漏问题求助
Jest 26迁移后NestJS测试出现句柄泄漏问题
我有一个使用Jest进行测试的NestJS应用,此前在Jest 25版本下测试一切正常,但迁移至Jest 26后,测试完成后出现了句柄泄漏问题。
Jest 25中的测试初始化与清理逻辑
在Jest 25中,我通过以下代码完成测试的初始化与清理:
初始化代码
beforeAll(async () => { const moduleFixture = await Test.createTestingModule({ imports: [AssignmentsModule, TimeSheetsModule, ExpensesModule, SessionModule] }) .compile(); assignmentService = moduleFixture.get<AssignmentsService>(AssignmentsService); assignmentsController = moduleFixture.get<AssignmentsController>(AssignmentsController); app = moduleFixture.createNestApplication(); await app.init(); server = await app.getHttpServer(); serverRequest = await request(server); authorizationHeaders = await getAuthorizationHeaders(serverRequest); });
清理代码
afterAll(async () => { await serverRequest.end(); await server.close(); await app.close(); });
迁移后的错误
迁移至Jest 26后,await serverRequest.end()返回错误,提示该函数已不存在。
句柄泄漏日志
我通过require('leaked-handles')生成了泄漏日志,示例如下:
http server handle leaked at one of: at ExpressAdapter.initHttpServer (/Users/princetone/Projects/TOLv4/tes-timeonline-api/node_modules/@nestjs/platform-express/adapters/express-adapter.js:144:36) http server handle { fd: 16, address: { address: '::', family: 'IPv6', port: 50272 } } http handle leaked at one of: at Test.Object.<anonymous>.Request.request (/Users/princetone/Projects/TOLv4/tes-timeonline-api/node_modules/superagent/lib/node/index.js:622:31) http stream { fd: 18, readable: true, writable: true, address: { address: '127.0.0.1', family: 'IPv4', port: 50273 }, method: 'GET', path: '/time-sheets/ML4W3K', host: '127.0.0.1:50272' } http stream { fd: 17, readable: true, writable: true, address: { address: '::ffff:127.0.0.1', family: 'IPv6', port: 50272 }, method: undefined, path: undefined, host: undefined }
运行环境
- node v14
- npm v6
- jest v26
- @nestjs/core、@nestjs/common、@nestjs/testing v9.4.3
我已花费大量时间查找解决方案,能否有人指出Jest 26中的哪些变更可能导致此问题?
内容的提问来源于stack exchange,提问作者Princeton Ebanks
相关产品推荐
相关产品推荐

