package.json test:e2e:prepare 现在是 migrate reset --force && prisma generate && seed 为 seed 运行时补充 JS Prisma client 生成器: schema.prisma 修复 seed 在 ESM/CJS 下的 Prisma 导入兼容: seed.mjs 修复 Jest 环境未加载 .env 导致连到 127.0.0.1 的问题: e2e-app.helper.ts 修复夹具依赖“名称”导致被组织测试改名后失效的问题(改为按 seed openId 反查): e2e-fixtures.helper.ts 修复组织测试的状态污染与清理逻辑,并收敛 afterAll 资源释放: organization.e2e-spec.ts e2e-context.helper.ts
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import 'dotenv/config';
|
||
import { BadRequestException, ValidationPipe } from '@nestjs/common';
|
||
import type { INestApplication } from '@nestjs/common';
|
||
import { Test } from '@nestjs/testing';
|
||
import { AppModule } from '../../../src/app.module.js';
|
||
import { HttpExceptionFilter } from '../../../src/common/http-exception.filter.js';
|
||
import { MESSAGES } from '../../../src/common/messages.js';
|
||
import { ResponseEnvelopeInterceptor } from '../../../src/common/response-envelope.interceptor.js';
|
||
|
||
export async function createE2eApp(): Promise<INestApplication> {
|
||
const moduleRef = await Test.createTestingModule({
|
||
imports: [AppModule],
|
||
}).compile();
|
||
|
||
const app = moduleRef.createNestApplication();
|
||
|
||
app.useGlobalPipes(
|
||
new ValidationPipe({
|
||
whitelist: true,
|
||
transform: true,
|
||
forbidNonWhitelisted: true,
|
||
exceptionFactory: (errors) => {
|
||
const messages = errors
|
||
.flatMap((error) => Object.values(error.constraints ?? {}))
|
||
.filter((item): item is string => Boolean(item));
|
||
|
||
return new BadRequestException(
|
||
messages.length > 0
|
||
? messages.join(';')
|
||
: MESSAGES.DEFAULT_BAD_REQUEST,
|
||
);
|
||
},
|
||
}),
|
||
);
|
||
|
||
app.useGlobalFilters(new HttpExceptionFilter());
|
||
app.useGlobalInterceptors(new ResponseEnvelopeInterceptor());
|
||
|
||
await app.init();
|
||
return app;
|
||
}
|