diff --git a/CHANGELOG.md b/CHANGELOG.md index 566573f13318..a19a6ca80c55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,7 @@ - `[@jest/types]`: New package to handle shared types ([#7834](https://github.com/facebook/jest/pull/7834)) - `[jest-util]`: Migrate to TypeScript ([#7844](https://github.com/facebook/jest/pull/7844)) - `[jest-watcher]`: Migrate to TypeScript ([#7843](https://github.com/facebook/jest/pull/7843)) -- `[jest-mock]`: Migrate to TypeScript ([#7847](https://github.com/facebook/jest/pull/7847)) +- `[jest-mock]`: Migrate to TypeScript ([#7847](https://github.com/facebook/jest/pull/7847), [#7850](https://github.com/facebook/jest/pull/7850)) ### Performance diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 9e6450e093ba..4d7d3a567664 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -53,6 +53,16 @@ type MockFunctionConfig = { specificMockImpls: Array; }; +// see https://github.com/Microsoft/TypeScript/issues/25215 +type NonFunctionPropertyNames = { + [K in keyof T]: T[K] extends (...args: any[]) => any ? never : K +}[keyof T] & + string; +type FunctionPropertyNames = { + [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never +}[keyof T] & + string; + interface Mock extends Function, MockInstance { @@ -328,12 +338,12 @@ function isReadonlyProp(object: any, prop: string): boolean { } class ModuleMockerClass { - _environmentGlobal: Global; - _mockState: WeakMap, MockFunctionState>; - _mockConfigRegistry: WeakMap; - _spyState: Set<() => void>; + private _environmentGlobal: Global; + private _mockState: WeakMap, MockFunctionState>; + private _mockConfigRegistry: WeakMap; + private _spyState: Set<() => void>; + private _invocationCallCounter: number; ModuleMocker: typeof ModuleMockerClass; - _invocationCallCounter: number; /** * @see README.md @@ -349,7 +359,7 @@ class ModuleMockerClass { this._invocationCallCounter = 1; } - _getSlots(object?: Object): Array { + private _getSlots(object?: Object): Array { if (!object) { return []; } @@ -396,7 +406,9 @@ class ModuleMockerClass { return Array.from(slots); } - _ensureMockConfig(f: Mock): MockFunctionConfig { + private _ensureMockConfig( + f: Mock, + ): MockFunctionConfig { let config = this._mockConfigRegistry.get(f); if (!config) { config = this._defaultMockConfig(); @@ -405,7 +417,7 @@ class ModuleMockerClass { return config; } - _ensureMockState( + private _ensureMockState( f: Mock, ): MockFunctionState { let state = this._mockState.get(f); @@ -416,7 +428,7 @@ class ModuleMockerClass { return state; } - _defaultMockConfig(): MockFunctionConfig { + private _defaultMockConfig(): MockFunctionConfig { return { defaultReturnValue: undefined, isReturnValueLastSet: false, @@ -427,7 +439,7 @@ class ModuleMockerClass { }; } - _defaultMockState(): MockFunctionState { + private _defaultMockState(): MockFunctionState { return { calls: [], instances: [], @@ -436,19 +448,19 @@ class ModuleMockerClass { }; } - _makeComponent( + private _makeComponent( metadata: Mocks.MockFunctionMetadata, restore?: () => void, ): Object; - _makeComponent( + private _makeComponent( metadata: Mocks.MockFunctionMetadata, restore?: () => void, ): Array; - _makeComponent( + private _makeComponent( metadata: Mocks.MockFunctionMetadata, restore?: () => void, ): RegExp; - _makeComponent( + private _makeComponent( metadata: Mocks.MockFunctionMetadata< T, Y, @@ -456,11 +468,11 @@ class ModuleMockerClass { >, restore?: () => void, ): T; - _makeComponent( + private _makeComponent( metadata: Mocks.MockFunctionMetadata, restore?: () => void, ): Mock; - _makeComponent( + private _makeComponent( metadata: Mocks.MockFunctionMetadata, restore?: () => void, ): Object | Array | RegExp | T | undefined | Mock { @@ -706,7 +718,7 @@ class ModuleMockerClass { } } - _createMockFunction( + private _createMockFunction( metadata: Mocks.MockFunctionMetadata, mockConstructor: Function, ): Function { @@ -766,7 +778,7 @@ class ModuleMockerClass { return createConstructor(mockConstructor); } - _generateMock( + private _generateMock( metadata: Mocks.MockFunctionMetadata, callbacks: Array, refs: { @@ -899,7 +911,7 @@ class ModuleMockerClass { return metadata; } - isMockFunction(fn: any): boolean { + isMockFunction(fn: any): fn is Mock { return !!fn && fn._isMockFunction === true; } @@ -912,26 +924,26 @@ class ModuleMockerClass { return fn; } - spyOn( + spyOn>( object: T, methodName: M, accessType: 'get', ): SpyInstance; - spyOn( + spyOn>( object: T, methodName: M, accessType: 'set', ): SpyInstance; - spyOn( + spyOn>( object: T, methodName: M, ): T[M] extends (...args: any[]) => any ? SpyInstance, ArgsType> : never; - spyOn( + spyOn>( object: T, methodName: M, accessType?: 'get' | 'set', @@ -973,7 +985,7 @@ class ModuleMockerClass { return object[methodName]; } - _spyOnProperty( + private _spyOnProperty>( obj: T, propertyName: M, accessType: 'get' | 'set' = 'get', @@ -1060,7 +1072,7 @@ class ModuleMockerClass { this._spyState = new Set(); } - _typeOf(value: any): string { + private _typeOf(value: any): string { return value == null ? '' + value : typeof value; } }