From 103fb154910e8b9df1c4e88896bc90f07c3ec341 Mon Sep 17 00:00:00 2001 From: Sam Hewitt Date: Thu, 24 Feb 2022 14:59:16 -0500 Subject: [PATCH] feat: add auto-mock support for async generators (#11080) --- CHANGELOG.md | 1 + e2e/generator-mock/__tests__/generatorMock.test.js | 4 ++++ e2e/generator-mock/index.js | 5 +++++ packages/jest-mock/src/index.ts | 6 ++++-- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7ef82ef73a3..8e2f49e47c16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ - `[jest-haste-map]` Add support for `dependencyExtractor` written in ESM ([#12008](https://github.com/facebook/jest/pull/12008)) - `[jest-mock]` [**BREAKING**] Rename exported utility types `ConstructorLike`, `MethodLike`, `ConstructorLikeKeys`, `MethodLikeKeys`, `PropertyLikeKeys`; remove exports of utility types `ArgumentsOf`, `ArgsType`, `ConstructorArgumentsOf` - TS builtin utility types `ConstructorParameters` and `Parameters` should be used instead ([#12435](https://github.com/facebook/jest/pull/12435)) - `[jest-mock]` Improve `isMockFunction` to infer types of passed function ([#12442](https://github.com/facebook/jest/pull/12442)) +- `[jest-mock]` Add support for auto-mocking async generator functions ([#11080](https://github.com/facebook/jest/pull/11080)) - `[jest-resolve]` [**BREAKING**] Add support for `package.json` `exports` ([#11961](https://github.com/facebook/jest/pull/11961), [#12373](https://github.com/facebook/jest/pull/12373)) - `[jest-resolve, jest-runtime]` Add support for `data:` URI import and mock ([#12392](https://github.com/facebook/jest/pull/12392)) - `[jest-resolve, jest-runtime]` Add support for async resolver ([#11540](https://github.com/facebook/jest/pull/11540)) diff --git a/e2e/generator-mock/__tests__/generatorMock.test.js b/e2e/generator-mock/__tests__/generatorMock.test.js index f34730b014c3..8da54d3f63f6 100644 --- a/e2e/generator-mock/__tests__/generatorMock.test.js +++ b/e2e/generator-mock/__tests__/generatorMock.test.js @@ -12,3 +12,7 @@ const methods = require('../index'); test('mock works with generator', () => { expect(methods.generatorMethod).toBeDefined(); }); + +test('mock works with asyncGenerator', () => { + expect(methods.asyncGeneratorMethod).toBeDefined(); +}); diff --git a/e2e/generator-mock/index.js b/e2e/generator-mock/index.js index 03da7dc17eda..9bc2c6208c40 100644 --- a/e2e/generator-mock/index.js +++ b/e2e/generator-mock/index.js @@ -9,4 +9,9 @@ function* generatorMethod() { yield 42; } +async function* asyncGeneratorMethod() { + yield 42; +} + module.exports.generatorMethod = generatorMethod; +module.exports.asyncGeneratorMethod = asyncGeneratorMethod; diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 16fee2a2addc..32e7cdb8a164 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -399,7 +399,8 @@ function getType(ref?: unknown): MockFunctionMetadataType | null { if ( typeName === 'Function' || typeName === 'AsyncFunction' || - typeName === 'GeneratorFunction' + typeName === 'GeneratorFunction' || + typeName === 'AsyncGeneratorFunction' ) { return 'function'; } else if (Array.isArray(ref)) { @@ -442,7 +443,8 @@ function isReadonlyProp(object: any, prop: string): boolean { return ( typeName === 'Function' || typeName === 'AsyncFunction' || - typeName === 'GeneratorFunction' + typeName === 'GeneratorFunction' || + typeName === 'AsyncGeneratorFunction' ); }