From dc4228e87e3df06b3d807b0705b2f05c774247ca Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Fri, 14 Oct 2022 07:29:11 +0300 Subject: [PATCH 01/12] feat(@jest/globals, jest-mock): add `jest.Spied*` utility types --- packages/jest-globals/src/index.ts | 25 +++++++ .../__typetests__/mock-functions.test.ts | 74 +++++++++++-------- packages/jest-mock/src/index.ts | 53 +++++++------ packages/test-globals/src/index.ts | 25 +++++++ 4 files changed, 123 insertions(+), 54 deletions(-) diff --git a/packages/jest-globals/src/index.ts b/packages/jest-globals/src/index.ts index 956d2b3fece7..400fb5a485f3 100644 --- a/packages/jest-globals/src/index.ts +++ b/packages/jest-globals/src/index.ts @@ -16,6 +16,11 @@ import type { MockedClass as JestMockedClass, MockedFunction as JestMockedFunction, MockedObject as JestMockedObject, + Spied as JestSpied, + SpiedClass as JestSpiedClass, + SpiedFunction as JestSpiedFunction, + SpiedGetter as JestSpiedGetter, + SpiedSetter as JestSpiedSetter, UnknownFunction, } from 'jest-mock'; @@ -58,6 +63,26 @@ declare namespace jest { * Wraps an object type with Jest mock type definitions. */ export type MockedObject = JestMockedObject; + /** + * Constructs the type of a spied class or function. + */ + export type Spied = JestSpied; + /** + * Constructs the type of a spied class. + */ + export type SpiedClass = JestSpiedClass; + /** + * Constructs the type of a spied function. + */ + export type SpiedFunction = JestSpiedFunction; + /** + * Constructs the type of a spied getter. + */ + export type SpiedGetter = JestSpiedGetter; + /** + * Constructs the type of a spied setter. + */ + export type SpiedSetter = JestSpiedSetter; } export {jest}; diff --git a/packages/jest-mock/__typetests__/mock-functions.test.ts b/packages/jest-mock/__typetests__/mock-functions.test.ts index 3d72cc4d37d0..58efe52a828b 100644 --- a/packages/jest-mock/__typetests__/mock-functions.test.ts +++ b/packages/jest-mock/__typetests__/mock-functions.test.ts @@ -11,7 +11,15 @@ import { expectNotAssignable, expectType, } from 'tsd-lite'; -import {Mock, SpyInstance, fn, spyOn} from 'jest-mock'; +import { + Mock, + SpiedClass, + SpiedFunction, + SpiedGetter, + SpiedSetter, + fn, + spyOn, +} from 'jest-mock'; // jest.fn() @@ -320,26 +328,30 @@ expectNotAssignable(spy); // eslint-disable-line @typescript-eslint/ba expectError(spy()); expectError(new spy()); -expectType>( +expectType>( spyOn(spiedObject, 'methodA'), ); -expectType>( +expectType>( spyOn(spiedObject, 'methodB'), ); -expectType>( +expectType>( spyOn(spiedObject, 'methodC'), ); -expectType boolean>>(spyOn(spiedObject, 'propertyB', 'get')); -expectType void>>( +expectType>( + spyOn(spiedObject, 'propertyB', 'get'), +); +expectType>( spyOn(spiedObject, 'propertyB', 'set'), ); expectError(spyOn(spiedObject, 'propertyB')); expectError(spyOn(spiedObject, 'methodB', 'get')); expectError(spyOn(spiedObject, 'methodB', 'set')); -expectType string>>(spyOn(spiedObject, 'propertyA', 'get')); -expectType void>>( +expectType>( + spyOn(spiedObject, 'propertyA', 'get'), +); +expectType>( spyOn(spiedObject, 'propertyA', 'set'), ); expectError(spyOn(spiedObject, 'propertyA')); @@ -351,40 +363,38 @@ expectError(spyOn(true, 'methodA')); expectError(spyOn(spiedObject)); expectError(spyOn()); -expectType boolean>>( +expectType>( spyOn(spiedArray as unknown as ArrayConstructor, 'isArray'), ); expectError(spyOn(spiedArray, 'isArray')); -expectType string>>( +expectType>( spyOn(spiedFunction as unknown as Function, 'toString'), // eslint-disable-line @typescript-eslint/ban-types ); expectError(spyOn(spiedFunction, 'toString')); -expectType Date>>( - spyOn(globalThis, 'Date'), -); -expectType number>>(spyOn(Date, 'now')); +expectType>(spyOn(globalThis, 'Date')); +expectType>(spyOn(Date, 'now')); // object with index signatures -expectType>( +expectType>( spyOn(indexSpiedObject, 'methodA'), ); -expectType>( +expectType>( spyOn(indexSpiedObject, 'methodB'), ); -expectType>( +expectType>( spyOn(indexSpiedObject, 'methodC'), ); -expectType>( +expectType>( spyOn(indexSpiedObject, 'methodE'), ); -expectType {a: string}>>( +expectType>( spyOn(indexSpiedObject, 'propertyA', 'get'), ); -expectType void>>( +expectType>( spyOn(indexSpiedObject, 'propertyA', 'set'), ); expectError(spyOn(indexSpiedObject, 'propertyA')); @@ -419,48 +429,48 @@ interface OptionalInterface { const optionalSpiedObject = {} as OptionalInterface; -expectType SomeClass>>( +expectType>>( spyOn(optionalSpiedObject, 'constructorA'), ); -expectType SomeClass>>( +expectType>( spyOn(optionalSpiedObject, 'constructorB'), ); expectError(spyOn(optionalSpiedObject, 'constructorA', 'get')); expectError(spyOn(optionalSpiedObject, 'constructorA', 'set')); -expectType void>>( +expectType>>( spyOn(optionalSpiedObject, 'methodA'), ); -expectType boolean>>( +expectType>( spyOn(optionalSpiedObject, 'methodB'), ); expectError(spyOn(optionalSpiedObject, 'methodA', 'get')); expectError(spyOn(optionalSpiedObject, 'methodA', 'set')); -expectType number>>( +expectType>>( spyOn(optionalSpiedObject, 'propertyA', 'get'), ); -expectType void>>( +expectType>>( spyOn(optionalSpiedObject, 'propertyA', 'set'), ); -expectType number>>( +expectType>>( spyOn(optionalSpiedObject, 'propertyB', 'get'), ); -expectType void>>( +expectType>>( spyOn(optionalSpiedObject, 'propertyB', 'set'), ); -expectType number | undefined>>( +expectType>( spyOn(optionalSpiedObject, 'propertyC', 'get'), ); -expectType void>>( +expectType>( spyOn(optionalSpiedObject, 'propertyC', 'set'), ); -expectType string>>( +expectType>( spyOn(optionalSpiedObject, 'propertyD', 'get'), ); -expectType void>>( +expectType>( spyOn(optionalSpiedObject, 'propertyD', 'set'), ); diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 408690efaaab..f038d2b8c028 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -100,6 +100,29 @@ export type MockedShallow = T extends ClassLike : T; export type UnknownFunction = (...args: Array) => unknown; +export type UnknownClass = {new (...args: Array): unknown}; + +export type SpiedClass = MockInstance< + (...args: ConstructorParameters) => InstanceType +>; + +export type SpiedFunction = + MockInstance<(...args: Parameters) => ReturnType>; + +export type SpiedGetter = MockInstance<() => T>; + +export type SpiedSetter = MockInstance<(arg: T) => void>; + +export type Spied = T extends ClassLike + ? MockInstance<(...args: ConstructorParameters) => InstanceType> + : T extends FunctionLike + ? MockInstance<(...args: Parameters) => ReturnType> + : never; + +// TODO in Jest 30 remove `SpyInstance` in favour of `Spied` +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SpyInstance + extends MockInstance {} /** * All what the internal typings need is to be sure that we have any-function. @@ -149,10 +172,6 @@ export interface MockInstance { mockRejectedValueOnce(value: RejectType): this; } -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface SpyInstance - extends MockInstance {} - type MockFunctionResultIncomplete = { type: 'incomplete'; /** @@ -1107,35 +1126,25 @@ export class ModuleMocker { T extends object, K extends PropertyLikeKeys, V extends Required[K], - >(object: T, methodKey: K, accessType: 'get'): SpyInstance<() => V>; - - spyOn< - T extends object, - K extends PropertyLikeKeys, - V extends Required[K], - >(object: T, methodKey: K, accessType: 'set'): SpyInstance<(arg: V) => void>; - - spyOn< - T extends object, - K extends ConstructorLikeKeys, - V extends Required[K], + A extends 'get' | 'set', >( object: T, methodKey: K, - ): V extends ClassLike - ? SpyInstance<(...args: ConstructorParameters) => InstanceType> + accessType: A, + ): A extends 'get' + ? SpiedGetter + : A extends 'set' + ? SpiedSetter : never; spyOn< T extends object, - K extends MethodLikeKeys, + K extends ConstructorLikeKeys | MethodLikeKeys, V extends Required[K], >( object: T, methodKey: K, - ): V extends FunctionLike - ? SpyInstance<(...args: Parameters) => ReturnType> - : never; + ): V extends ClassLike | FunctionLike ? Spied : never; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types spyOn>( diff --git a/packages/test-globals/src/index.ts b/packages/test-globals/src/index.ts index 94eedd3e3520..3dc3d697f508 100644 --- a/packages/test-globals/src/index.ts +++ b/packages/test-globals/src/index.ts @@ -16,6 +16,11 @@ import type { MockedClass as JestMockedClass, MockedFunction as JestMockedFunction, MockedObject as JestMockedObject, + Spied as JestSpied, + SpiedClass as JestSpiedClass, + SpiedFunction as JestSpiedFunction, + SpiedGetter as JestSpiedGetter, + SpiedSetter as JestSpiedSetter, UnknownFunction, } from 'jest-mock'; @@ -63,5 +68,25 @@ declare global { * Wraps an object type with Jest mock type definitions. */ export type MockedObject = JestMockedObject; + /** + * Constructs the type of a spied class or function. + */ + export type Spied = JestSpied; + /** + * Constructs the type of a spied class. + */ + export type SpiedClass = JestSpiedClass; + /** + * Constructs the type of a spied function. + */ + export type SpiedFunction = JestSpiedFunction; + /** + * Constructs the type of a spied getter. + */ + export type SpiedGetter = JestSpiedGetter; + /** + * Constructs the type of a spied setter. + */ + export type SpiedSetter = JestSpiedSetter; } } From ad13071ae97b0e7fc0b3f7c94fc71e18240bfba0 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Fri, 14 Oct 2022 20:32:33 +0300 Subject: [PATCH 02/12] clean up --- packages/jest-mock/src/index.ts | 7 +++---- packages/jest-types/__typetests__/jest.test.ts | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index f038d2b8c028..1f8d8c910327 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -1099,10 +1099,9 @@ export class ModuleMocker { } isMockFunction( - fn: SpyInstance, - ): fn is SpyInstance; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint - isMockFunction

, R extends unknown>( + fn: MockInstance, + ): fn is MockInstance; + isMockFunction

, R>( fn: (...args: P) => R, ): fn is Mock<(...args: P) => R>; isMockFunction(fn: unknown): fn is Mock; diff --git a/packages/jest-types/__typetests__/jest.test.ts b/packages/jest-types/__typetests__/jest.test.ts index e6a9cc895e1f..29213e918f97 100644 --- a/packages/jest-types/__typetests__/jest.test.ts +++ b/packages/jest-types/__typetests__/jest.test.ts @@ -9,13 +9,13 @@ import {expectAssignable, expectError, expectType} from 'tsd-lite'; import {jest} from '@jest/globals'; import type { Mock, + MockInstance, Mocked, MockedClass, MockedFunction, MockedObject, MockedShallow, ModuleMocker, - SpyInstance, } from 'jest-mock'; expectType( @@ -216,7 +216,7 @@ const spiedObject = { const surelySpy = jest.spyOn(spiedObject, 'methodA'); if (jest.isMockFunction(surelySpy)) { - expectType boolean>>(surelySpy); + expectType boolean>>(surelySpy); surelySpy.mockReturnValueOnce(false); expectError(surelyMock.mockReturnValueOnce(123)); From 826b2581f19ddbe98a09f673f141d798375de8a5 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sat, 15 Oct 2022 13:16:27 +0300 Subject: [PATCH 03/12] more tests --- packages/jest-globals/src/index.ts | 2 +- .../jest-types/__typetests__/jest.test.ts | 38 +++++++++++++++++++ packages/test-globals/src/index.ts | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/packages/jest-globals/src/index.ts b/packages/jest-globals/src/index.ts index 400fb5a485f3..c2bd3abb7f59 100644 --- a/packages/jest-globals/src/index.ts +++ b/packages/jest-globals/src/index.ts @@ -66,7 +66,7 @@ declare namespace jest { /** * Constructs the type of a spied class or function. */ - export type Spied = JestSpied; + export type Spied = JestSpied; /** * Constructs the type of a spied class. */ diff --git a/packages/jest-types/__typetests__/jest.test.ts b/packages/jest-types/__typetests__/jest.test.ts index 29213e918f97..ad5717d43645 100644 --- a/packages/jest-types/__typetests__/jest.test.ts +++ b/packages/jest-types/__typetests__/jest.test.ts @@ -287,6 +287,8 @@ function someFunction(a: string, b?: number): boolean { const someObject = { SomeClass, + _propertyC: false, + methodA() { return; }, @@ -304,8 +306,16 @@ const someObject = { }, propertyA: 123, + propertyB: 'value', + set propertyC(value) { + this._propertyC = value; + }, + get propertyC() { + return this._propertyC; + }, + someClassInstance: new SomeClass('value'), }; @@ -433,6 +443,34 @@ expectError( expectAssignable(mockObjectB); +// Spied + +expectAssignable>( + jest.spyOn(someObject, 'methodA'), +); + +expectAssignable>( + jest.spyOn(someObject, 'SomeClass'), +); + +// Spied* + +expectAssignable>( + jest.spyOn(someObject, 'SomeClass'), +); + +expectAssignable>( + jest.spyOn(someObject, 'methodB'), +); + +expectAssignable>( + jest.spyOn(someObject, 'propertyC', 'get'), +); + +expectAssignable>( + jest.spyOn(someObject, 'propertyC', 'set'), +); + // Mock Timers expectType(jest.advanceTimersByTime(6000)); diff --git a/packages/test-globals/src/index.ts b/packages/test-globals/src/index.ts index 3dc3d697f508..ddeaf6e1b7a0 100644 --- a/packages/test-globals/src/index.ts +++ b/packages/test-globals/src/index.ts @@ -71,7 +71,7 @@ declare global { /** * Constructs the type of a spied class or function. */ - export type Spied = JestSpied; + export type Spied = JestSpied; /** * Constructs the type of a spied class. */ From 39b847b8461b398df0ab2d0a9e4d135d53bb7556 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 10:26:03 +0300 Subject: [PATCH 04/12] add docs --- docs/JestObjectAPI.md | 12 ++++++++++-- docs/MockFunctionAPI.md | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 6314b7f0797c..631d74f78a12 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -141,7 +141,9 @@ module.exports = { ```js title="__tests__/createMockFromModule.test.js" const utils = jest.createMockFromModule('../utils'); -utils.isAuthorized = jest.fn(secret => secret === 'not wizard'); +jest + .spyOn(utils, 'isAuthorized') + .mockImplementation(secret => secret === 'not wizard'); test('implementation created by jest.createMockFromModule', () => { expect(jest.isMockFunction(utils.authorize)).toBe(true); @@ -162,7 +164,9 @@ export const utils = { const {utils} = jest.createMockFromModule('../utils'); -utils.isAuthorized = jest.fn((secret: string) => secret === 'not wizard'); +jest + .spyOn(utils, 'isAuthorized') + .mockImplementation((secret: string) => secret === 'not wizard'); test('implementation created by jest.createMockFromModule', () => { expect(jest.isMockFunction(utils.authorize)).toBe(true); @@ -699,6 +703,10 @@ test('plays audio', () => { }); ``` +### `jest.Spied` + +See [TypeScript Usage](MockFunctionAPI.md/#jestspiedsource) chapter of Mock Functions page for documentation. + ### `jest.clearAllMocks()` Clears the `mock.calls`, `mock.instances`, `mock.contexts` and `mock.results` properties of all mocks. Equivalent to calling [`.mockClear()`](MockFunctionAPI.md#mockfnmockclear) on every mocked function. diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index fef7d983aec6..f742b97c097d 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -644,3 +644,28 @@ test('direct usage', () => { expect(jest.mocked(console.log).mock.calls).toHaveLength(1); }); ``` + +### `jest.Spied` + +Constructs the type of a spied class or function, i.e. the return type of `jest.spyOn()`. + +```ts +import {expect, jest, test} from '@jest/globals'; +import * as platform from './'; + +function getLoginSpy(): jest.Spied { + // ... +} + +let loginSpy: jest.Spied; +// equivalent to: `ReturnType { + +test('passes username and password', () => { + loginSpy = getLoginSpy(); + // ... +}); +``` + +Types of a class or function can be passed as type argument to `jest.Spied`. If you prefer to constrain the input type, use: `jest.SpiedClass` or `jest.SpiedFunction`. + +Use `jest.SpiedGetter` or `jest.SpiedSetter` to create the type of a spied getter or setter respectively. From 29b4242b824079700141fd3c759b0127f06ef563 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 10:28:29 +0300 Subject: [PATCH 05/12] add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1c45709268e..d559084a4e5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Features +- `[@jest/globals, jest-mock]` Add `jest.Spied*` utility types ([#13440](https://github.com/facebook/jest/pull/13440)) + ### Fixes ### Chore & Maintenance From 93b2ff212a4f52fb32536eeaa4eff8c9f1d33e02 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 14:03:37 +0300 Subject: [PATCH 06/12] clean up --- docs/JestObjectAPI.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 631d74f78a12..130df2459bef 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -141,9 +141,7 @@ module.exports = { ```js title="__tests__/createMockFromModule.test.js" const utils = jest.createMockFromModule('../utils'); -jest - .spyOn(utils, 'isAuthorized') - .mockImplementation(secret => secret === 'not wizard'); +utils.isAuthorized = jest.fn(secret => secret === 'not wizard'); test('implementation created by jest.createMockFromModule', () => { expect(jest.isMockFunction(utils.authorize)).toBe(true); @@ -164,9 +162,7 @@ export const utils = { const {utils} = jest.createMockFromModule('../utils'); -jest - .spyOn(utils, 'isAuthorized') - .mockImplementation((secret: string) => secret === 'not wizard'); +utils.isAuthorized = jest.fn((secret: string) => secret === 'not wizard'); test('implementation created by jest.createMockFromModule', () => { expect(jest.isMockFunction(utils.authorize)).toBe(true); From 0098f6f4a34f320ef39b558067206e67805ec711 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 14:05:11 +0300 Subject: [PATCH 07/12] tweak docs --- docs/MockFunctionAPI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index f742b97c097d..b041636a8c53 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -647,7 +647,7 @@ test('direct usage', () => { ### `jest.Spied` -Constructs the type of a spied class or function, i.e. the return type of `jest.spyOn()`. +Constructs the type of a spied class or function (i.e. the return type of `jest.spyOn()`). ```ts import {expect, jest, test} from '@jest/globals'; From 14bd5f147eb655635fe1424e9bc47db70b651842 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 14:05:42 +0300 Subject: [PATCH 08/12] clean up --- docs/MockFunctionAPI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index b041636a8c53..875fcd910b5a 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -650,7 +650,7 @@ test('direct usage', () => { Constructs the type of a spied class or function (i.e. the return type of `jest.spyOn()`). ```ts -import {expect, jest, test} from '@jest/globals'; +import {jest, test} from '@jest/globals'; import * as platform from './'; function getLoginSpy(): jest.Spied { From 5f751439f7eed717f15c84cb5c06e159e7723997 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 14:54:45 +0300 Subject: [PATCH 09/12] improve example --- docs/MockFunctionAPI.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index 875fcd910b5a..2d3b6904ef76 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -649,20 +649,25 @@ test('direct usage', () => { Constructs the type of a spied class or function (i.e. the return type of `jest.spyOn()`). -```ts -import {jest, test} from '@jest/globals'; -import * as platform from './'; +```ts title="__utils__/setDateNow.ts" +import {jest} from '@jest/globals'; -function getLoginSpy(): jest.Spied { - // ... +export function setDateNow(now: number): jest.Spied { + return jest.spyOn(Date, 'now').mockReturnValue(now); } +``` -let loginSpy: jest.Spied; -// equivalent to: `ReturnType { +```ts +import {expect, jest, test} from '@jest/globals'; +import {setDateNow} from './__utils__/setDateNow'; -test('passes username and password', () => { - loginSpy = getLoginSpy(); +let spiedDateNow: jest.Spied; + +test('renders correctly with a given date', () => { + spiedDateNow = setDateNow(1482363367071); // ... + + expect(spiedDateNow).toHaveBeenCalledTimes(1); }); ``` From 56fdbd40ea1313bc691400132d781be0b1a18d61 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 15:00:17 +0300 Subject: [PATCH 10/12] add mockReset --- docs/MockFunctionAPI.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index 2d3b6904ef76..f85cbb1c3596 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -658,11 +658,15 @@ export function setDateNow(now: number): jest.Spied { ``` ```ts -import {expect, jest, test} from '@jest/globals'; +import {afterEach, expect, jest, test} from '@jest/globals'; import {setDateNow} from './__utils__/setDateNow'; let spiedDateNow: jest.Spied; +afterEach(() => { + spiedDateNow.mockReset(); +}); + test('renders correctly with a given date', () => { spiedDateNow = setDateNow(1482363367071); // ... From bead8ed6f3826dc677728b7c4c607025d85b84dd Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 15:03:27 +0300 Subject: [PATCH 11/12] nullish --- docs/MockFunctionAPI.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index f85cbb1c3596..58b02dc8d8f0 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -661,10 +661,10 @@ export function setDateNow(now: number): jest.Spied { import {afterEach, expect, jest, test} from '@jest/globals'; import {setDateNow} from './__utils__/setDateNow'; -let spiedDateNow: jest.Spied; +let spiedDateNow: jest.Spied | undefined = undefined; afterEach(() => { - spiedDateNow.mockReset(); + spiedDateNow?.mockReset(); }); test('renders correctly with a given date', () => { From 2fc53f12c84eeee25006982da644e5c390f0d434 Mon Sep 17 00:00:00 2001 From: Tom Mrazauskas Date: Sun, 16 Oct 2022 15:08:08 +0300 Subject: [PATCH 12/12] Update docs/JestObjectAPI.md Co-authored-by: Simen Bekkhus --- docs/JestObjectAPI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 130df2459bef..a961dab0fd0d 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -701,7 +701,7 @@ test('plays audio', () => { ### `jest.Spied` -See [TypeScript Usage](MockFunctionAPI.md/#jestspiedsource) chapter of Mock Functions page for documentation. +See [TypeScript Usage](MockFunctionAPI.md#jestspiedsource) chapter of Mock Functions page for documentation. ### `jest.clearAllMocks()`