import type { ModuleMetadata } from '@nestjs/common/interfaces/modules/module-metadata.interface'; import type { NestApplicationContextOptions } from '@nestjs/common/interfaces/nest-application-context-options.interface'; import type { TestingModuleBuilder } from '@nestjs/testing'; import type { MockFactory } from '@nestjs/testing/interfaces'; import type { OverrideByFactoryOptions } from '@nestjs/testing/interfaces/override-by-factory-options.interface'; import type { PlatformOptions } from '@rsdk/core'; import { PlatformTestingModule } from './platform-testing-module'; type PlatformTestingOptions = Omit & { appName?: string; }; /** * Переопределение нужно ради того чтобы `builder.overridePipe(SomePipe).useValue(MockPipe)` * возвращал наш интерфейс */ export interface OverrideBy { useValue: (value: any) => PlatformTestingModuleBuilder; useFactory: (options: OverrideByFactoryOptions) => PlatformTestingModuleBuilder; useClass: (metatype: any) => PlatformTestingModuleBuilder; } /** * Приходится переопределять каждый метод отдельно */ interface PlatformTestingModuleBuilder /** * Omit чтобы не ругался что типы не совпадают */ extends Omit { overridePipe(typeOrToken: T): OverrideBy; useMocker(mocker: MockFactory): TestingModuleBuilder; overrideFilter(typeOrToken: T): OverrideBy; overrideGuard(typeOrToken: T): OverrideBy; overrideInterceptor(typeOrToken: T): OverrideBy; overrideProvider(typeOrToken: T): OverrideBy; compile(options?: Pick): Promise; } export declare class PlatformTest { private readonly options; private constructor(); /** * Почему нужно использовать инстанс? * По большей степени исключительно для прозрачного разделения `API`. * Сначала определяем всю необходимую конфигурацию для платформы, после этого создаём тестируемый модуль * @param options */ static create(options: PlatformTestingOptions): PlatformTest; /** * Аналог метода `Test.createTestingModule` из nestjs * Ключевым отличием является то, что в возвращаемом билдере и производных недоступны методы * вызов которых может привести к неожиданному поведению * @param metadata */ createTestingModule(metadata: ModuleMetadata): PlatformTestingModuleBuilder; } export {};