import { ModuleMetadata } from '@nestjs/common' import { ConfigModule } from '@nestjs/config' import { Test, TestingModule } from '@nestjs/testing' import * as config from '@server/config' type ClassType = new (...args: any[]) => T export function createServiceUnitTestApp(Service: ClassType, module?: ModuleMetadata) { const proxy = {} as { service: T app: TestingModule } beforeAll(async () => { const { imports, providers } = module || {} const app = await Test.createTestingModule({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], load: [...Object.values(config)], }), ...(imports || []), ], providers: [Service, ...(providers || [])], }).compile() await app.init() proxy.service = app.get(Service) proxy.app = app }) return proxy }