From fdb05e811cec483c24b3211990d37d1ee78c72ac Mon Sep 17 00:00:00 2001 From: Rajat Date: Sun, 14 Nov 2021 23:14:29 +0530 Subject: [PATCH 1/6] replaced substr --- packages/jest-config/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-config/src/utils.ts b/packages/jest-config/src/utils.ts index 869e60897d7e..9958f6b6bcaf 100644 --- a/packages/jest-config/src/utils.ts +++ b/packages/jest-config/src/utils.ts @@ -65,7 +65,7 @@ export const replaceRootDirInPath = ( return path.resolve( rootDir, - path.normalize('./' + filePath.substr(''.length)), + path.normalize('./' + filePath.substring(''.length)), ); }; From b5a69e26a29fc4b148adcae3ad2c7abd50283aee Mon Sep 17 00:00:00 2001 From: Rajat Date: Sun, 14 Nov 2021 23:15:18 +0530 Subject: [PATCH 2/6] replaced substr --- packages/jest-haste-map/src/lib/fast_path.ts | 2 +- packages/jest-haste-map/src/worker.ts | 2 +- packages/jest-snapshot/src/index.ts | 2 +- packages/jest-transform/src/ScriptTransformer.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/jest-haste-map/src/lib/fast_path.ts b/packages/jest-haste-map/src/lib/fast_path.ts index 39e3e1812387..ea1d0c11ef8d 100644 --- a/packages/jest-haste-map/src/lib/fast_path.ts +++ b/packages/jest-haste-map/src/lib/fast_path.ts @@ -10,7 +10,7 @@ import * as path from 'path'; // rootDir and filename must be absolute paths (resolved) export function relative(rootDir: string, filename: string): string { return filename.indexOf(rootDir + path.sep) === 0 - ? filename.substr(rootDir.length + 1) + ? filename.substring(rootDir.length + 1) : path.relative(rootDir, filename); } diff --git a/packages/jest-haste-map/src/worker.ts b/packages/jest-haste-map/src/worker.ts index 7422bb5643fc..4a53879e6ae4 100644 --- a/packages/jest-haste-map/src/worker.ts +++ b/packages/jest-haste-map/src/worker.ts @@ -63,7 +63,7 @@ export async function worker(data: WorkerMessage): Promise { } catch (err: any) { throw new Error(`Cannot parse ${filePath} as JSON: ${err.message}`); } - } else if (!blacklist.has(filePath.substr(filePath.lastIndexOf('.')))) { + } else if (!blacklist.has(filePath.substring(filePath.lastIndexOf('.')))) { // Process a random file that is returned as a MODULE. if (hasteImpl) { id = hasteImpl.getHasteName(filePath); diff --git a/packages/jest-snapshot/src/index.ts b/packages/jest-snapshot/src/index.ts index d9c7fed4dc38..58bae0a9d0b8 100644 --- a/packages/jest-snapshot/src/index.ts +++ b/packages/jest-snapshot/src/index.ts @@ -99,7 +99,7 @@ function stripAddedIndentation(inlineSnapshot: string) { return inlineSnapshot; } - lines[i] = lines[i].substr(indentation.length); + lines[i] = lines[i].substring(indentation.length); } } diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index b643eaf91857..7e17f65822e5 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -876,9 +876,9 @@ function readCodeCacheFile(cachePath: Config.Path): string | null { if (content == null) { return null; } - const code = content.substr(33); + const code = content.substring(33); const checksum = createHash('md5').update(code).digest('hex'); - if (checksum === content.substr(0, 32)) { + if (checksum === content.substring(0, 32)) { return code; } return null; From 62e8179f697302fd0c588d9f2444219ce203e8ac Mon Sep 17 00:00:00 2001 From: Rajat Date: Thu, 18 Nov 2021 20:03:52 +0530 Subject: [PATCH 3/6] update changelog.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ac4d97d3e95..45275a5fe3aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ - `[jest-environment-jsdom]` Add `@types/jsdom` dependency ([#11999](https://github.com/facebook/jest/pull/11999)) - `[jest-environment-jsdom]` Do not reset the global.document too early on teardown ([#11871](https://github.com/facebook/jest/pull/11871)) - `[jest-transform]` Improve error and warning messages ([#11998](https://github.com/facebook/jest/pull/11998)) +- `[jest-config, jest-haste-map, jest-snapshot, jest-transform]` replaced string substr(deprecated) method with substring ([#12066](https://github.com/facebook/jest/pull/12066)) + ### Chore & Maintenance From bb4b24dc660411b0f406be4ad4b0c36d6f22fb81 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 18 Nov 2021 16:12:29 +0100 Subject: [PATCH 4/6] Update CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45275a5fe3aa..388e3585043e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,11 @@ - `[jest-environment-jsdom]` Add `@types/jsdom` dependency ([#11999](https://github.com/facebook/jest/pull/11999)) - `[jest-environment-jsdom]` Do not reset the global.document too early on teardown ([#11871](https://github.com/facebook/jest/pull/11871)) - `[jest-transform]` Improve error and warning messages ([#11998](https://github.com/facebook/jest/pull/11998)) -- `[jest-config, jest-haste-map, jest-snapshot, jest-transform]` replaced string substr(deprecated) method with substring ([#12066](https://github.com/facebook/jest/pull/12066)) - ### Chore & Maintenance +- `[*]` Replaced `substr` method with `substring` ([#12066](https://github.com/facebook/jest/pull/12066)) + ### Performance ## 27.3.1 From 7fb073035226ac39e13bf2188e81bb78a3cc8297 Mon Sep 17 00:00:00 2001 From: Rajat Date: Thu, 25 Nov 2021 17:00:54 +0530 Subject: [PATCH 5/6] tsjestmockutil --- .../jest-mock/src/__tests__/index.test.ts | 11 ++++- packages/jest-mock/src/index.ts | 46 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/packages/jest-mock/src/__tests__/index.test.ts b/packages/jest-mock/src/__tests__/index.test.ts index 854d79a1c7b7..818749758924 100644 --- a/packages/jest-mock/src/__tests__/index.test.ts +++ b/packages/jest-mock/src/__tests__/index.test.ts @@ -1,3 +1,4 @@ + /** * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. * @@ -9,7 +10,8 @@ /* eslint-disable local/ban-types-eventually, local/prefer-rest-params-eventually */ import vm, {Context} from 'vm'; -import {ModuleMocker, fn, spyOn} from '../'; +import {ModuleMocker, fn, mocked,spyOn} from '../'; + describe('moduleMocker', () => { let moduleMocker: ModuleMocker; @@ -1452,6 +1454,13 @@ describe('moduleMocker', () => { }); }); +describe('mocked', () => { + it('should return unmodified input', () => { + const subject = {} + expect(mocked(subject)).toBe(subject) + }) +}); + test('`fn` and `spyOn` do not throw', () => { expect(() => { fn(); diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 0d0cdce00a8c..2af33abf8e45 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -1,3 +1,4 @@ + /** * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. * @@ -32,6 +33,38 @@ export type MockFunctionMetadata< length?: number; }; +export type MockableFunction = (...args:Array) => any +export type MethodKeysOf = { [K in keyof T]: T[K] extends MockableFunction ? K : never }[keyof T] +export type PropertyKeysOf = { [K in keyof T]: T[K] extends MockableFunction ? never : K }[keyof T] + +export type ArgumentsOf = T extends (...args: infer A) => any ? A : never + +export type ConstructorArgumentsOf = T extends new (...args: infer A) => any ? A : never + +export interface MockWithArgs extends jest.MockInstance, ArgumentsOf> { + new (...args: ConstructorArgumentsOf): T + (...args: ArgumentsOf): ReturnType +} +export type MaybeMockedConstructor = T extends new (...args:Array) => infer R + ? jest.MockInstance> + : T +export type MockedFunction = MockWithArgs & { [K in keyof T]: T[K] } +export type MockedFunctionDeep = MockWithArgs & MockedObjectDeep +export type MockedObject = MaybeMockedConstructor & { + [K in MethodKeysOf]: T[K] extends MockableFunction ? MockedFunction : T[K] +} & { [K in PropertyKeysOf]: T[K] } +export type MockedObjectDeep = MaybeMockedConstructor & { + [K in MethodKeysOf]: T[K] extends MockableFunction ? MockedFunctionDeep : T[K] +} & { [K in PropertyKeysOf]: MaybeMockedDeep } + +export type MaybeMockedDeep = T extends MockableFunction + ? MockedFunctionDeep + : T extends object + ? MockedObjectDeep + : T + +export type MaybeMocked = T extends MockableFunction ? MockedFunction : T extends object ? MockedObject : T + export interface Mock = Array> extends Function, MockInstance { @@ -1109,9 +1142,22 @@ export class ModuleMocker { private _typeOf(value: any): string { return value == null ? '' + value : typeof value; } + + // the typings test helper + mocked(item: T, deep?: false): MaybeMocked + + mocked(item: T, deep: true): MaybeMockedDeep + + mocked(item: T, _deep = false): MaybeMocked | MaybeMockedDeep { + + return item as any +} + } const JestMock = new ModuleMocker(global as unknown as typeof globalThis); export const fn = JestMock.fn.bind(JestMock); export const spyOn = JestMock.spyOn.bind(JestMock); +export const mocked=JestMock.mocked.bind(JestMock); + From e310607dfc9ca3ed904d07d5ee61c07c8fb04f14 Mon Sep 17 00:00:00 2001 From: Rajat Date: Thu, 25 Nov 2021 19:46:57 +0530 Subject: [PATCH 6/6] mockedclass --- packages/jest-mock/src/index.ts | 36 +++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 2af33abf8e45..9188d700b542 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -1,4 +1,5 @@ + /** * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. * @@ -18,11 +19,7 @@ export type MockFunctionMetadataType = | 'null' | 'undefined'; -export type MockFunctionMetadata< - T, - Y extends Array, - Type = MockFunctionMetadataType, -> = { +export type MockFunctionMetadata< T, Y extends Array, Type = MockFunctionMetadataType,> = { ref?: number; members?: Record>; mockImpl?: (...args: Y) => T; @@ -33,18 +30,13 @@ export type MockFunctionMetadata< length?: number; }; -export type MockableFunction = (...args:Array) => any +export type MockableFunction = (...args: Array) => any export type MethodKeysOf = { [K in keyof T]: T[K] extends MockableFunction ? K : never }[keyof T] export type PropertyKeysOf = { [K in keyof T]: T[K] extends MockableFunction ? never : K }[keyof T] export type ArgumentsOf = T extends (...args: infer A) => any ? A : never export type ConstructorArgumentsOf = T extends new (...args: infer A) => any ? A : never - -export interface MockWithArgs extends jest.MockInstance, ArgumentsOf> { - new (...args: ConstructorArgumentsOf): T - (...args: ArgumentsOf): ReturnType -} export type MaybeMockedConstructor = T extends new (...args:Array) => infer R ? jest.MockInstance> : T @@ -65,6 +57,28 @@ export type MaybeMockedDeep = T extends MockableFunction export type MaybeMocked = T extends MockableFunction ? MockedFunction : T extends object ? MockedObject : T + +export type Mocked = { + [P in keyof T]: T[P] extends (...args: Array) => any + ? MockInstance, jest.ArgsType> + : T[P] extends jest.Constructable + ? MockedClass + : T[P] +} & + T; + +export type MockedClass = MockInstance< + InstanceType, + T extends new (...args: infer P) => any ? P : never + > & { + prototype: T extends { prototype: any } ? Mocked : never; + } & T; + +export interface MockWithArgs extends jest.MockInstance, ArgumentsOf> { + new (...args: ConstructorArgumentsOf): T + (...args: ArgumentsOf): ReturnType +} + export interface Mock = Array> extends Function, MockInstance {