NestJS端到端测试阻塞Git Hook,无法推送代码求助
解决NestJS端到端测试后Jest不退出导致Git Push Hook卡住的问题
问题根源
你的端到端测试在beforeEach中创建并初始化了Nest应用实例,但未在测试结束后销毁它。Nest应用启动后会持有HTTP服务器、数据库连接等异步资源,这些未关闭的资源会导致Jest无法判定测试完全结束,进而抛出超时警告,最终让pre-push脚本卡住,无法完成代码推送。
直接解决方案
在测试用例中添加afterEach钩子,每次测试完成后关闭Nest应用实例,释放所有异步资源:
import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; import { AppModule } from './../src/app.module'; describe('AppController (e2e)', () => { let app: INestApplication; beforeEach(async () => { const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }).compile(); app = moduleFixture.createNestApplication(); await app.init(); }); // 新增:每次测试后关闭应用实例 afterEach(async () => { await app.close(); }); it('/ (GET)', () => { return request(app.getHttpServer()) .get('/') .expect(200) .expect('Hello World!'); }); });
验证问题(可选)
你可以通过Jest的--detectOpenHandles参数验证未关闭的资源:
yarn test:e2e --detectOpenHandles
执行后Jest会列出所有未关闭的异步资源,确认是Nest应用实例未销毁导致的问题。
内容的提问来源于stack exchange,提问作者Paulo de Oliveira Neto
相关产品推荐
相关产品推荐

