test(server): new test facilities (#10870)

close CLOUD-142
This commit is contained in:
forehalo
2025-03-17 10:02:12 +00:00
parent 92db9a693a
commit 9b5d12dc71
12 changed files with 311 additions and 46 deletions

View File

@@ -0,0 +1,49 @@
import { ModuleMetadata } from '@nestjs/common';
import {
Test,
TestingModule as NestjsTestingModule,
TestingModuleBuilder,
} from '@nestjs/testing';
import { FunctionalityModules } from '../app.module';
import { AFFiNELogger } from '../base';
import { TEST_LOG_LEVEL } from './utils';
interface TestingModuleMetadata extends ModuleMetadata {
tapModule?(m: TestingModuleBuilder): void;
}
export interface TestingModule extends NestjsTestingModule {
[Symbol.asyncDispose](): Promise<void>;
}
export async function createModule(
metadata: TestingModuleMetadata
): Promise<TestingModule> {
const { tapModule, ...meta } = metadata;
const builder = Test.createTestingModule({
...meta,
imports: [...FunctionalityModules, ...(meta.imports ?? [])],
});
// when custom override happens
if (tapModule) {
tapModule(builder);
}
const module = (await builder.compile()) as TestingModule;
const logger = new AFFiNELogger();
// we got a lot smoking tests try to break nestjs
// can't tolerate the noisy logs
logger.setLogLevels([TEST_LOG_LEVEL]);
module.useLogger(logger);
await module.init();
module[Symbol.asyncDispose] = async () => {
await module.close();
};
return module;
}