You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:57:09