soda-test
Version:
Package for Unit and API tests
397 lines (396 loc) • 13.3 kB
TypeScript
/// <reference types="node" />
import { EventEmitter } from 'events';
import { argumentDecorator } from '.';
export declare const TestBed: TestBedInterface;
export declare function getInitTestBedFunction(): () => void;
export interface FixtureOptions {
declarations?: unknown[];
imports?: unknown[];
inputs?: string[];
outputs?: string[];
events?: string[];
}
export declare function fixture<T>(component: Type<T>, options?: FixtureOptions): argumentDecorator;
export declare function component<T>(component: Type<T>): argumentDecorator;
type ANY = any;
type AFunction = Function;
export declare function createFixture<T>(component: Type<T>, options: FixtureOptions): SodaFixture<T>;
export declare function addEvents(...names: string[]): void;
export declare function createComponent<T>(component: Type<T>): T;
export interface TestBedInterface {
get platform(): PlatformRef;
get ngModule(): Type<ANY> | Type<ANY>[];
initTestEnvironment(ngModule: Type<ANY> | Type<ANY>[], platform: PlatformRef, options?: TestEnvironmentOptions): void;
resetTestEnvironment(): void;
resetTestingModule(): TestBedInterface;
configureCompiler(config: {
providers?: ANY[];
useJit?: boolean;
}): void;
configureTestingModule(moduleDef: TestModuleMetadata): TestBedInterface;
compileComponents(): Promise<ANY>;
inject<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;
inject<T>(token: ProviderToken<T>, notFoundValue: null, flags?: InjectFlags): T | null;
/** @deprecated from v9.0.0 use TestBed.inject */
get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): ANY;
/** @deprecated from v9.0.0 use TestBed.inject */
get(token: ANY, notFoundValue?: ANY): ANY;
execute(tokens: ANY[], fn: AFunction, context?: ANY): ANY;
overrideModule(ngModule: Type<ANY>, override: MetadataOverride<NgModule>): TestBedInterface;
overrideComponent(component: Type<ANY>, override: MetadataOverride<Component>): TestBedInterface;
overrideDirective(directive: Type<ANY>, override: MetadataOverride<Directive>): TestBedInterface;
overridePipe(pipe: Type<ANY>, override: MetadataOverride<Pipe>): TestBedInterface;
overrideTemplate(component: Type<ANY>, template: string): TestBedInterface;
overrideProvider(token: ANY, provider: {
useFactory: AFunction;
deps: ANY[];
}): TestBedInterface;
overrideProvider(token: ANY, provider: {
useValue: ANY;
}): TestBedInterface;
overrideProvider(token: ANY, provider: {
useFactory?: AFunction;
useValue?: ANY;
deps?: ANY[];
}): TestBedInterface;
overrideTemplateUsingTestingModule(component: Type<ANY>, template: string): TestBedInterface;
createComponent<T>(component: Type<T>): ComponentFixture<T>;
}
export interface ComponentFixture<T, DET = DebugElement> {
ngZone: NgZone | null;
debugElement: DET;
componentInstance: T;
nativeElement: ANY;
detectChanges(checkNoChanges?: boolean): void;
checkNoChanges(): void;
autoDetectChanges(autoDetect?: boolean): void;
isStable(): boolean;
whenStable(): Promise<ANY>;
whenRenderingDone(): Promise<ANY>;
destroy(): void;
}
export interface CommonEvents {
click(eventObj?: PointerEvent): void;
input(eventObj?: InputEvent): void;
ngModelChange(text: string): void;
}
export interface SodaFixture<T, E = CommonEvents> extends ComponentFixture<T, SodaDebugElement<E>> {
queryByCss<E1 = E>(selector: string): SodaDebugElement<E1>;
get inputs(): {
[key: string]: ANY;
};
get events(): EventEmitter;
}
export interface ComponentRef<C> {
setInput(name: string, value: unknown): void;
get location(): ElementRef;
get injector(): Injector;
get instance(): C;
get hostView(): ViewRef;
get changeDetectorRef(): ChangeDetectorRef;
get componentType(): Type<ANY>;
destroy(): void;
onDestroy(callback: AFunction): void;
}
export interface NgZone {
readonly hasPendingMacrotasks: boolean;
readonly hasPendingMicrotasks: boolean;
readonly isStable: boolean;
readonly onUnstable: EventEmitter;
readonly onMicrotaskEmpty: EventEmitter;
readonly onStable: EventEmitter;
readonly onError: EventEmitter;
run<T>(fn: (...args: ANY[]) => T, applyThis?: ANY, applyArgs?: ANY[]): T;
runTask<T>(fn: (...args: ANY[]) => T, applyThis?: ANY, applyArgs?: ANY[], name?: string): T;
runGuarded<T>(fn: (...args: ANY[]) => T, applyThis?: ANY, applyArgs?: ANY[]): T;
runOutsideAngular<T>(fn: (...args: ANY[]) => T): T;
}
interface DebugElementBase<DET> extends DebugNode<DET> {
get nativeElement(): HTMLElement;
get name(): string;
get properties(): {
[key: string]: ANY;
};
get attributes(): {
[key: string]: string | null;
};
get styles(): {
[key: string]: string | null;
};
get classes(): {
[key: string]: boolean;
};
get childNodes(): DebugNode<DET>[];
get children(): DET[];
}
export interface DebugElement extends DebugElementBase<DebugElement> {
query(predicate: Predicate<DebugElement>): DebugElement;
queryAll(predicate: Predicate<DebugElement>): DebugElement[];
queryAllNodes(predicate: Predicate<DebugNode<DebugElement>>): DebugNode<DebugElement>[];
triggerEventHandler(eventName: string, eventObj?: unknown): void;
}
export interface SodaDebugElement<E = CommonEvents> extends DebugElementBase<SodaDebugElement> {
text: string;
query: {
by: {
css<E1 = E>(selector: string): SodaDebugElement<E1>;
};
};
queryAll: {
by: {
css<E1 = E>(selector: string): SodaDebugElement<E1>[];
};
};
queryAllNodes: {
by: {
directive<E1 = E>(type: Type<ANY>): DebugNode<SodaDebugElement<E1>>[];
all<E1 = E>(): DebugNode<SodaDebugElement<E1>>[];
};
};
triggerEventHandler: E;
}
export interface ElementRef<T = ANY> {
nativeElement: T;
}
export interface ChangeDetectorRef {
markForCheck(): void;
detach(): void;
detectChanges(): void;
checkNoChanges(): void;
reattach(): void;
}
export interface Injector {
get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;
get(token: ANY, notFoundValue?: ANY): ANY;
}
export interface ViewRef extends ChangeDetectorRef {
destroy(): void;
get destroyed(): boolean;
onDestroy(callback: AFunction): ANY;
}
export interface DebugNode<DET> {
readonly nativeNode: ANY;
get parent(): DET | null;
get injector(): Injector;
get componentInstance(): ANY;
get context(): ANY;
get listeners(): DebugEventListener[];
get references(): {
[key: string]: ANY;
};
get providerTokens(): ANY[];
}
export interface DebugEventListener {
name: string;
callback: AFunction;
}
export interface Type<T> extends AFunction {
new (...args: unknown[]): T;
}
export declare enum InjectFlags {
Default = 0,
Host = 1,
Self = 2,
SkipSelf = 4,
Optional = 8
}
export interface PlatformRef {
bootstrapModuleFactory<M>(moduleFactory: NgModuleFactory<M>, options?: BootstrapOptions): Promise<NgModuleRef<M>>;
bootstrapModule<M>(moduleType: Type<M>, compilerOptions?: (CompilerOptions & BootstrapOptions) | Array<CompilerOptions & BootstrapOptions>): Promise<NgModuleRef<M>>;
onDestroy(callback: () => void): void;
get injector(): Injector;
destroy(): void;
get destroyed(): boolean;
}
export interface NgModuleFactory<T> {
get moduleType(): Type<T>;
create(parentInjector: Injector | null): NgModuleRef<T>;
}
export interface NgModuleRef<T> {
get injector(): EnvironmentInjector;
get componentFactoryResolver(): ComponentFactoryResolver;
get instance(): T;
destroy(): void;
onDestroy(callback: () => void): void;
}
export interface EnvironmentInjector extends Injector {
get<T>(token: ProviderToken<T>, notFoundValue?: T, flags?: InjectFlags): T;
get(token: ANY, notFoundValue?: ANY): ANY;
runInContext<ReturnT>(fn: () => ReturnT): ReturnT;
destroy(): void;
}
export interface ComponentFactoryResolver {
resolveComponentFactory<T>(component: Type<T>): ComponentFactory<T>;
}
export interface ComponentFactory<C> {
get selector(): string;
componentType(): Type<ANY>;
get ngContentSelectors(): string[];
get inputs(): {
propName: string;
templateName: string;
}[];
get outputs(): {
propName: string;
templateName: string;
}[];
create(injector: Injector, projectableNodes?: ANY[][], rootSelectorOrNode?: string | ANY, environmentInjector?: EnvironmentInjector | NgModuleRef<ANY>): ComponentRef<C>;
}
export interface NgModule {
providers?: Provider[];
declarations?: Array<Type<ANY> | ANY[]>;
imports?: Array<Type<ANY> | ModuleWithProviders<ANY> | ANY[]>;
exports?: Array<Type<ANY> | ANY[]>;
entryComponents?: Array<Type<ANY> | ANY[]>;
bootstrap?: Array<Type<ANY> | ANY[]>;
schemas?: Array<SchemaMetadata | ANY[]>;
id?: string;
jit?: true;
}
export interface Component extends Directive {
changeDetection?: ChangeDetectionStrategy;
viewProviders?: Provider[];
moduleId?: string;
templateUrl?: string;
template?: string;
styleUrls?: string[];
styles?: string[];
animations?: ANY[];
encapsulation?: ViewEncapsulation;
interpolation?: [string, string];
entryComponents?: Array<Type<ANY> | ANY[]>;
preserveWhitespaces?: boolean;
standalone?: boolean;
imports?: (Type<ANY> | ANY[])[];
schemas?: SchemaMetadata[];
}
export interface Directive {
selector?: string;
inputs?: string[];
outputs?: string[];
providers?: Provider[];
exportAs?: string;
queries?: {
[key: string]: ANY;
};
host?: {
[key: string]: string;
};
jit?: true;
standalone?: boolean;
}
export interface Pipe {
name: string;
pure?: boolean;
standalone?: boolean;
}
export declare enum ChangeDetectionStrategy {
OnPush = 0,
Default = 1
}
export declare enum ViewEncapsulation {
Emulated = 0,
None = 2,
ShadowDom = 3
}
export interface TestModuleMetadata {
providers?: ANY[];
declarations?: ANY[];
imports?: ANY[];
schemas?: Array<SchemaMetadata | ANY[]>;
teardown?: ModuleTeardownOptions;
errorOnUnknownElements?: boolean;
errorOnUnknownProperties?: boolean;
}
interface ModuleTeardownOptions {
destroyAfterEach: boolean;
rethrowErrors?: boolean;
}
export type MetadataOverride<T> = {
add?: Partial<T>;
remove?: Partial<T>;
set?: Partial<T>;
};
export interface TestEnvironmentOptions {
teardown?: ModuleTeardownOptions;
errorOnUnknownElements?: boolean;
errorOnUnknownProperties?: boolean;
}
export interface Predicate<T> {
(value: T): boolean;
}
export type ProviderToken<T> = Type<T> | AbstractType<T>;
interface AbstractType<T> extends AFunction {
prototype: T;
}
export interface BootstrapOptions {
ngZone?: NgZone | 'zone.js' | 'noop';
ngZoneEventCoalescing?: boolean;
ngZoneRunCoalescing?: boolean;
}
export type CompilerOptions = {
useJit?: boolean;
defaultEncapsulation?: ViewEncapsulation;
providers?: StaticProvider[];
missingTranslation?: MissingTranslationStrategy;
preserveWhitespaces?: boolean;
};
type StaticProvider = ValueProvider | ExistingProvider | StaticClassProvider | ConstructorProvider | FactoryProvider | ANY[];
interface ValueProvider extends ValueSansProvider {
provide: ANY;
multi?: boolean;
}
interface ValueSansProvider {
useValue: ANY;
}
interface ExistingProvider extends ExistingSansProvider {
provide: ANY;
multi?: boolean;
}
interface ExistingSansProvider {
useExisting: ANY;
}
interface StaticClassProvider extends StaticClassSansProvider {
provide: ANY;
multi?: boolean;
}
interface StaticClassSansProvider {
useClass: Type<ANY>;
deps: ANY[];
}
interface ConstructorProvider extends ConstructorSansProvider {
provide: Type<ANY>;
multi?: boolean;
}
interface ConstructorSansProvider {
deps?: ANY[];
}
interface FactoryProvider extends FactorySansProvider {
provide: ANY;
multi?: boolean;
}
interface FactorySansProvider {
useFactory: AFunction;
deps?: ANY[];
}
declare enum MissingTranslationStrategy {
Error = 0,
Warning = 1,
Ignore = 2
}
export type Provider = Type<ANY> | ValueProvider | ClassProvider | ConstructorProvider | ExistingProvider | FactoryProvider | ANY[];
interface ClassProvider extends ClassSansProvider {
provide: ANY;
multi?: boolean;
}
interface ClassSansProvider {
useClass: Type<ANY>;
}
export interface ModuleWithProviders<T> {
ngModule: Type<T>;
providers?: Provider[];
}
export interface SchemaMetadata {
name: string;
}
export {};