/** * 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 ClassLike = { new (...args: any): any; }; export declare type ConstructorLikeKeys = keyof { [K in keyof T as T[K] extends ClassLike ? K : never]: T[K]; }; export declare const fn: ( implementation?: T | undefined, ) => Mock; export declare type FunctionLike = (...args: any) => any; export declare type MethodLikeKeys = keyof { [K in keyof T as T[K] extends FunctionLike ? K : never]: T[K]; }; /** * All what the internal typings need is to be sure that we have any-function. * `FunctionLike` type ensures that and helps to constrain the type as well. * The default of `UnknownFunction` makes sure that `any`s do not leak to the * user side. For instance, calling `fn()` without implementation will return * a mock of `(...args: Array) => unknown` type. If implementation * is provided, its typings are inferred correctly. */ export declare interface Mock extends Function, MockInstance { new (...args: Parameters): ReturnType; (...args: Parameters): ReturnType; } export declare type Mocked = T extends ClassLike ? MockedClass : T extends FunctionLike ? MockedFunction : T extends object ? MockedObject : T; export declare const mocked: { ( source: T, options?: { shallow: false; }, ): Mocked; ( source: T_1, options: { shallow: true; }, ): MockedShallow; }; export declare type MockedClass = MockInstance< (...args: ConstructorParameters) => Mocked> > & MockedObject; export declare type MockedFunction = MockInstance & MockedObject; declare type MockedFunctionShallow = MockInstance & T; export declare type MockedObject = { [K in keyof T]: T[K] extends ClassLike ? MockedClass : T[K] extends FunctionLike ? MockedFunction : T[K] extends object ? MockedObject : T[K]; } & T; declare type MockedObjectShallow = { [K in keyof T]: T[K] extends ClassLike ? MockedClass : T[K] extends FunctionLike ? MockedFunctionShallow : T[K]; } & T; export declare type MockedShallow = T extends ClassLike ? MockedClass : T extends FunctionLike ? MockedFunctionShallow : T extends object ? MockedObjectShallow : T; export declare type MockFunctionMetadata< T extends UnknownFunction = UnknownFunction, MetadataType = MockFunctionMetadataType, > = { ref?: number; members?: Record>; mockImpl?: T; name?: string; refID?: number; type?: MetadataType; value?: ReturnType; length?: number; }; export declare type MockFunctionMetadataType = | 'object' | 'array' | 'regexp' | 'function' | 'constant' | 'collection' | 'null' | 'undefined'; declare type MockFunctionResult = | MockFunctionResultIncomplete | MockFunctionResultReturn | MockFunctionResultThrow; declare type MockFunctionResultIncomplete = { type: 'incomplete'; /** * Result of a single call to a mock function that has not yet completed. * This occurs if you test the result from within the mock function itself, * or from within a function that was called by the mock. */ value: undefined; }; declare type MockFunctionResultReturn< T extends FunctionLike = UnknownFunction, > = { type: 'return'; /** * Result of a single call to a mock function that returned. */ value: ReturnType; }; declare type MockFunctionResultThrow = { type: 'throw'; /** * Result of a single call to a mock function that threw. */ value: unknown; }; declare type MockFunctionState = { /** * List of the call arguments of all calls that have been made to the mock. */ calls: Array>; /** * List of all the object instances that have been instantiated from the mock. */ instances: Array>; /** * List of all the function contexts that have been applied to calls to the mock. */ contexts: Array>; /** * List of the call order indexes of the mock. Jest is indexing the order of * invocations of all mocks in a test file. The index is starting with `1`. */ invocationCallOrder: Array; /** * List of the call arguments of the last call that was made to the mock. * If the function was not called, it will return `undefined`. */ lastCall?: Parameters; /** * List of the results of all calls that have been made to the mock. */ results: Array>; }; export declare interface MockInstance< T extends FunctionLike = UnknownFunction, > { _isMockFunction: true; _protoImpl: Function; getMockImplementation(): T | undefined; getMockName(): string; mock: MockFunctionState; mockClear(): this; mockReset(): this; mockRestore(): void; mockImplementation(fn: T): this; mockImplementationOnce(fn: T): this; mockName(name: string): this; mockReturnThis(): this; mockReturnValue(value: ReturnType): this; mockReturnValueOnce(value: ReturnType): this; mockResolvedValue(value: ResolveType): this; mockResolvedValueOnce(value: ResolveType): this; mockRejectedValue(value: RejectType): this; mockRejectedValueOnce(value: RejectType): this; } 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( metadata: MockFunctionMetadata, ): Mock; /** * @see README.md * @param component The component for which to retrieve metadata. */ getMetadata( component: ReturnType, _refs?: Map, number>, ): MockFunctionMetadata | null; isMockFunction( fn: SpyInstance, ): fn is SpyInstance; isMockFunction

, R extends unknown>( fn: (...args: P) => R, ): fn is Mock<(...args: P) => R>; isMockFunction(fn: unknown): fn is Mock; fn(implementation?: T): Mock; spyOn>( object: T, methodName: M, accessType: 'get', ): SpyInstance<() => T[M]>; spyOn>( object: T, methodName: M, accessType: 'set', ): SpyInstance<(arg: T[M]) => void>; spyOn>( object: T, methodName: M, ): T[M] extends ClassLike ? SpyInstance<(...args: ConstructorParameters) => InstanceType> : never; spyOn>( object: T, methodName: M, ): T[M] extends FunctionLike ? SpyInstance<(...args: Parameters) => ReturnType> : never; private _spyOnProperty; clearAllMocks(): void; resetAllMocks(): void; restoreAllMocks(): void; private _typeOf; mocked( source: T, options?: { shallow: false; }, ): Mocked; mocked( source: T, options: { shallow: true; }, ): MockedShallow; } export declare type PropertyLikeKeys = Exclude< keyof T, ConstructorLikeKeys | MethodLikeKeys >; declare type RejectType = ReturnType extends PromiseLike ? unknown : never; declare type ResolveType = ReturnType extends PromiseLike ? U : never; export declare interface SpyInstance extends MockInstance {} declare const spyOn_2: { < T extends object, M extends Exclude< keyof T, | keyof {[K in keyof T as T[K] extends ClassLike ? K : never]: T[K]} | keyof { [K_1 in keyof T as T[K_1] extends FunctionLike ? K_1 : never]: T[K_1]; } >, >( object: T, methodName: M, accessType: 'get', ): SpyInstance<() => T[M]>; < T_1 extends object, M_1 extends Exclude< keyof T_1, | keyof { [K_2 in keyof T_1 as T_1[K_2] extends ClassLike ? K_2 : never]: T_1[K_2]; } | keyof { [K_3 in keyof T_1 as T_1[K_3] extends FunctionLike ? K_3 : never]: T_1[K_3]; } >, >( object: T_1, methodName: M_1, accessType: 'set', ): SpyInstance<(arg: T_1[M_1]) => void>; < T_2 extends object, M_2 extends keyof { [K_4 in keyof T_2 as T_2[K_4] extends ClassLike ? K_4 : never]: T_2[K_4]; }, >( object: T_2, methodName: M_2, ): T_2[M_2] extends ClassLike ? SpyInstance< (...args: ConstructorParameters) => InstanceType > : never; < T_3 extends object, M_3 extends keyof { [K_5 in keyof T_3 as T_3[K_5] extends FunctionLike ? K_5 : never]: T_3[K_5]; }, >( object: T_3, methodName: M_3, ): T_3[M_3] extends FunctionLike ? SpyInstance<(...args: Parameters) => ReturnType> : never; }; export {spyOn_2 as spyOn}; export declare type UnknownFunction = (...args: Array) => unknown; export {};