我正在尝试在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,
},
};
我期待该进程顺利运行并退出,但它从未存在并输出我上面提供的日志。
当您没有完成某些异步任务时,这一切都会发生。
为了让一切正常工作,您必须: 将回调传递给 afterAll 函数,以关闭所有连接和异步函数。
提供PrismaModule、AuthModule的代码,以便我能更准确的回答