为什么在尝试运行 e2e 测试时,NestJS 中的 Jest 进程永远不会退出?

问题描述 投票:0回答:1

我正在尝试在nestjs中实现e2e测试,这是

auth.e2e-spec.ts
文件:

import { ConfigModule } from '@nestjs/config';
import { INestApplication, ValidationPipe } from '@nestjs/common';
import { TestingModule, Test } from '@nestjs/testing';
import * as request from 'supertest';

import { AuthModule } from '@/auth';
import { PrismaModule, PrismaService } from '@/prisma';
import { validationPipeOptions } from '@/main';

describe('[Feature] Auth - /auth', () => {
  let app: INestApplication;
  let prismaService: PrismaService;
  let module: TestingModule;

  beforeAll(async () => {
    module = await Test.createTestingModule({
      imports: [ConfigModule.forRoot(), PrismaModule, AuthModule],
    }).compile();

    app = module.createNestApplication();
    app.useGlobalPipes(new ValidationPipe(validationPipeOptions));
    prismaService = module.get<PrismaService>(PrismaService);

    await app.init();
  });

  it('POST /api/auth/signup - invalid credentials', async () => {
    return request(app.getHttpServer())
      .post('/api/auth/signup')
      .send({ email: 'invalid', password: 'short' })
      .expect(400);
  });

  afterAll(async () => {
    await prismaService.$disconnect();
    await module.close();
    await app.close();
  });
});

当我运行

pnpm run test:e2e -- auth
命令时,测试文件将被处理,并记录以下内容,并且该进程永远不存在: 在此输入图片描述

我意识到,每当我在测试文件中注释掉

app.useGlobalPipes(new ValidationPipe(validationPipeOptions));
时,这种情况就不会发生,但这会禁用我的 dto 验证。我希望得到一些帮助。

这也是验证配置:

export const validationPipeOptions: ValidationPipeOptions = {
  whitelist: true,
  forbidNonWhitelisted: true,
  transform: true,
  transformOptions: {
    enableImplicitConversion: true,
  },
};

我期待该进程顺利运行并退出,但它从未存在并输出我上面提供的日志。

testing jestjs nestjs prisma e2e-testing
1个回答
0
投票

当您没有完成某些异步任务时,这一切都会发生。

为了让一切正常工作,您必须: 将回调传递给 afterAll 函数,以关闭所有连接和异步函数。

提供PrismaModuleAuthModule的代码,以便我能更准确的回答

© www.soinside.com 2019 - 2024. All rights reserved.