import { IModule, ProviderDefinition, InjectionToken } from '@omnitron-dev/titan/nexus'; import { Application } from '@omnitron-dev/titan/application'; import type { IApplicationConfig } from '@omnitron-dev/titan/application'; import { TestContainer } from './nexus/test-container.js'; export interface TestModuleOptions { modules?: IModule[]; providers?: Array<[InjectionToken, ProviderDefinition]>; mocks?: Array<{ token: InjectionToken; mock: any; spy?: boolean; }>; config?: Partial; autoMock?: boolean; } export declare class TestModule { private options; private container; private app?; constructor(options?: TestModuleOptions); getContainer(): TestContainer; createApplication(): Promise; mock(token: InjectionToken, mock: T, spy?: boolean): this; stub(token: InjectionToken, stub: Partial): this; override(token: InjectionToken): { useValue: (value: T) => TestModule; useClass: (cls: new (...args: any[]) => T) => TestModule; useFactory: (factory: (...args: any[]) => T) => TestModule; }; spy(token: InjectionToken, method: keyof T): any; get(token: InjectionToken): T; resetMocks(): void; clearMocks(): void; restore(): void; cleanup(): Promise; } export declare function createTestModule(options?: TestModuleOptions): TestModule; export declare class TestModuleBuilder { private options; withModule(module: IModule): this; withProvider(token: InjectionToken, provider: ProviderDefinition): this; withMock(token: InjectionToken, mock: T, spy?: boolean): this; withConfig(config: Partial): this; withAutoMock(): this; build(): TestModule; } export declare function testModule(): TestModuleBuilder;