You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
8.1 KiB
185 lines
8.1 KiB
/** |
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
export declare type MockFunctionMetadataType = 'object' | 'array' | 'regexp' | 'function' | 'constant' | 'collection' | 'null' | 'undefined'; |
|
export declare type MockFunctionMetadata<T, Y extends Array<unknown>, Type = MockFunctionMetadataType> = { |
|
ref?: number; |
|
members?: Record<string, MockFunctionMetadata<T, Y>>; |
|
mockImpl?: (...args: Y) => T; |
|
name?: string; |
|
refID?: number; |
|
type?: Type; |
|
value?: T; |
|
length?: number; |
|
}; |
|
export declare type MockableFunction = (...args: Array<any>) => any; |
|
export declare type MethodKeysOf<T> = { |
|
[K in keyof T]: T[K] extends MockableFunction ? K : never; |
|
}[keyof T]; |
|
export declare type PropertyKeysOf<T> = { |
|
[K in keyof T]: T[K] extends MockableFunction ? never : K; |
|
}[keyof T]; |
|
export declare type ArgumentsOf<T> = T extends (...args: infer A) => any ? A : never; |
|
export declare type ConstructorArgumentsOf<T> = T extends new (...args: infer A) => any ? A : never; |
|
export declare type MaybeMockedConstructor<T> = T extends new (...args: Array<any>) => infer R ? MockInstance<R, ConstructorArgumentsOf<T>> : T; |
|
export declare type MockedFunction<T extends MockableFunction> = MockWithArgs<T> & { |
|
[K in keyof T]: T[K]; |
|
}; |
|
export declare type MockedFunctionDeep<T extends MockableFunction> = MockWithArgs<T> & MockedObjectDeep<T>; |
|
export declare type MockedObject<T> = MaybeMockedConstructor<T> & { |
|
[K in MethodKeysOf<T>]: T[K] extends MockableFunction ? MockedFunction<T[K]> : T[K]; |
|
} & { |
|
[K in PropertyKeysOf<T>]: T[K]; |
|
}; |
|
export declare type MockedObjectDeep<T> = MaybeMockedConstructor<T> & { |
|
[K in MethodKeysOf<T>]: T[K] extends MockableFunction ? MockedFunctionDeep<T[K]> : T[K]; |
|
} & { |
|
[K in PropertyKeysOf<T>]: MaybeMockedDeep<T[K]>; |
|
}; |
|
export declare type MaybeMockedDeep<T> = T extends MockableFunction ? MockedFunctionDeep<T> : T extends object ? MockedObjectDeep<T> : T; |
|
export declare type MaybeMocked<T> = T extends MockableFunction ? MockedFunction<T> : T extends object ? MockedObject<T> : T; |
|
export declare type ArgsType<T> = T extends (...args: infer A) => any ? A : never; |
|
export declare type Mocked<T> = { |
|
[P in keyof T]: T[P] extends (...args: Array<any>) => any ? MockInstance<ReturnType<T[P]>, ArgsType<T[P]>> : T[P] extends Constructable ? MockedClass<T[P]> : T[P]; |
|
} & T; |
|
export declare type MockedClass<T extends Constructable> = MockInstance<InstanceType<T>, T extends new (...args: infer P) => any ? P : never> & { |
|
prototype: T extends { |
|
prototype: any; |
|
} ? Mocked<T['prototype']> : never; |
|
} & T; |
|
export interface Constructable { |
|
new (...args: Array<any>): any; |
|
} |
|
export interface MockWithArgs<T extends MockableFunction> extends MockInstance<ReturnType<T>, ArgumentsOf<T>> { |
|
new (...args: ConstructorArgumentsOf<T>): T; |
|
(...args: ArgumentsOf<T>): ReturnType<T>; |
|
} |
|
export interface Mock<T, Y extends Array<unknown> = Array<unknown>> extends Function, MockInstance<T, Y> { |
|
new (...args: Y): T; |
|
(...args: Y): T; |
|
} |
|
export interface SpyInstance<T, Y extends Array<unknown>> extends MockInstance<T, Y> { |
|
} |
|
export interface MockInstance<T, Y extends Array<unknown>> { |
|
_isMockFunction: true; |
|
_protoImpl: Function; |
|
getMockName(): string; |
|
getMockImplementation(): Function | undefined; |
|
mock: MockFunctionState<T, Y>; |
|
mockClear(): this; |
|
mockReset(): this; |
|
mockRestore(): void; |
|
mockImplementation(fn: (...args: Y) => T): this; |
|
mockImplementation(fn: () => Promise<T>): this; |
|
mockImplementationOnce(fn: (...args: Y) => T): this; |
|
mockImplementationOnce(fn: () => Promise<T>): this; |
|
mockName(name: string): this; |
|
mockReturnThis(): this; |
|
mockReturnValue(value: T): this; |
|
mockReturnValueOnce(value: T): this; |
|
mockResolvedValue(value: Unpromisify<T>): this; |
|
mockResolvedValueOnce(value: Unpromisify<T>): this; |
|
mockRejectedValue(value: unknown): this; |
|
mockRejectedValueOnce(value: unknown): this; |
|
} |
|
declare type Unpromisify<T> = T extends Promise<infer R> ? R : never; |
|
/** |
|
* Possible types of a MockFunctionResult. |
|
* 'return': The call completed by returning normally. |
|
* 'throw': The call completed by throwing a value. |
|
* 'incomplete': The call has not completed yet. This is possible if you read |
|
* the mock function result from within the mock function itself |
|
* (or a function called by the mock function). |
|
*/ |
|
declare type MockFunctionResultType = 'return' | 'throw' | 'incomplete'; |
|
/** |
|
* Represents the result of a single call to a mock function. |
|
*/ |
|
declare type MockFunctionResult = { |
|
/** |
|
* Indicates how the call completed. |
|
*/ |
|
type: MockFunctionResultType; |
|
/** |
|
* The value that was either thrown or returned by the function. |
|
* Undefined when type === 'incomplete'. |
|
*/ |
|
value: unknown; |
|
}; |
|
declare type MockFunctionState<T, Y extends Array<unknown>> = { |
|
calls: Array<Y>; |
|
instances: Array<T>; |
|
invocationCallOrder: Array<number>; |
|
/** |
|
* Getter for retrieving the last call arguments |
|
*/ |
|
lastCall?: Y; |
|
/** |
|
* List of results of calls to the mock function. |
|
*/ |
|
results: Array<MockFunctionResult>; |
|
}; |
|
declare type NonFunctionPropertyNames<T> = { |
|
[K in keyof T]: T[K] extends (...args: Array<any>) => any ? never : K; |
|
}[keyof T] & string; |
|
declare type FunctionPropertyNames<T> = { |
|
[K in keyof T]: T[K] extends (...args: Array<any>) => any ? K : never; |
|
}[keyof T] & string; |
|
export declare class ModuleMocker { |
|
private _environmentGlobal; |
|
private _mockState; |
|
private _mockConfigRegistry; |
|
private _spyState; |
|
private _invocationCallCounter; |
|
/** |
|
* @see README.md |
|
* @param global Global object of the test environment, used to create |
|
* mocks |
|
*/ |
|
constructor(global: typeof globalThis); |
|
private _getSlots; |
|
private _ensureMockConfig; |
|
private _ensureMockState; |
|
private _defaultMockConfig; |
|
private _defaultMockState; |
|
private _makeComponent; |
|
private _createMockFunction; |
|
private _generateMock; |
|
/** |
|
* @see README.md |
|
* @param _metadata Metadata for the mock in the schema returned by the |
|
* getMetadata method of this module. |
|
*/ |
|
generateFromMetadata<T, Y extends Array<unknown>>(_metadata: MockFunctionMetadata<T, Y>): Mock<T, Y>; |
|
/** |
|
* @see README.md |
|
* @param component The component for which to retrieve metadata. |
|
*/ |
|
getMetadata<T, Y extends Array<unknown>>(component: T, _refs?: Map<T, number>): MockFunctionMetadata<T, Y> | null; |
|
isMockFunction<T>(fn: unknown): fn is Mock<T>; |
|
fn<T, Y extends Array<unknown>>(implementation?: (...args: Y) => T): Mock<T, Y>; |
|
spyOn<T extends {}, M extends NonFunctionPropertyNames<T>>(object: T, methodName: M, accessType: 'get'): SpyInstance<T[M], []>; |
|
spyOn<T extends {}, M extends NonFunctionPropertyNames<T>>(object: T, methodName: M, accessType: 'set'): SpyInstance<void, [T[M]]>; |
|
spyOn<T extends {}, M extends FunctionPropertyNames<T>>(object: T, methodName: M): T[M] extends (...args: Array<any>) => any ? SpyInstance<ReturnType<T[M]>, Parameters<T[M]>> : never; |
|
private _spyOnProperty; |
|
clearAllMocks(): void; |
|
resetAllMocks(): void; |
|
restoreAllMocks(): void; |
|
private _typeOf; |
|
mocked<T>(item: T, deep?: false): MaybeMocked<T>; |
|
mocked<T>(item: T, deep: true): MaybeMockedDeep<T>; |
|
} |
|
export declare const fn: <T, Y extends unknown[]>(implementation?: ((...args: Y) => T) | undefined) => Mock<T, Y>; |
|
export declare const spyOn: { |
|
<T extends {}, M extends NonFunctionPropertyNames<T>>(object: T, methodName: M, accessType: 'get'): SpyInstance<T[M], []>; |
|
<T_2 extends {}, M_2 extends NonFunctionPropertyNames<T_2>>(object: T_2, methodName: M_2, accessType: 'set'): SpyInstance<void, [T_2[M_2]]>; |
|
<T_4 extends {}, M_4 extends FunctionPropertyNames<T_4>>(object: T_4, methodName: M_4): T_4[M_4] extends (...args: Array<any>) => any ? SpyInstance<ReturnType<T_4[M_4]>, Parameters<T_4[M_4]>> : never; |
|
}; |
|
export declare const mocked: { |
|
<T>(item: T, deep?: false | undefined): MaybeMocked<T>; |
|
<T_2>(item: T_2, deep: true): MaybeMockedDeep<T_2>; |
|
}; |
|
export {};
|
|
|