diff --git a/CHANGELOG.md b/CHANGELOG.md index f29887d759a1..786ec76af00a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[jest-mock]` Fix typings for `mockResolvedValue`, `mockResolvedValueOnce`, `mockRejectedValue` and `mockRejectedValueOnce` + ### Chore & Maintenance ### Performance diff --git a/packages/jest-mock/src/index.ts b/packages/jest-mock/src/index.ts index 8031900b0453..073c9d6b8a6d 100644 --- a/packages/jest-mock/src/index.ts +++ b/packages/jest-mock/src/index.ts @@ -63,13 +63,15 @@ namespace JestMock { mockReturnThis(): this; mockReturnValue(value: T): this; mockReturnValueOnce(value: T): this; - mockResolvedValue(value: T): this; - mockResolvedValueOnce(value: T): this; - mockRejectedValue(value: T): this; - mockRejectedValueOnce(value: T): this; + mockResolvedValue(value: Unpromisify): this; + mockResolvedValueOnce(value: Unpromisify): this; + mockRejectedValue(value: unknown): this; + mockRejectedValueOnce(value: unknown): this; } } +type Unpromisify = T extends Promise ? R : never; + /** * Possible types of a MockFunctionResult. * 'return': The call completed by returning normally. @@ -661,20 +663,20 @@ class ModuleMockerClass { // next function call will return this value or default return value f.mockImplementationOnce(() => value); - f.mockResolvedValueOnce = (value: T) => - f.mockImplementationOnce(() => Promise.resolve(value)); + f.mockResolvedValueOnce = (value: Unpromisify) => + f.mockImplementationOnce(() => Promise.resolve(value as T)); - f.mockRejectedValueOnce = (value: T) => + f.mockRejectedValueOnce = (value: unknown) => f.mockImplementationOnce(() => Promise.reject(value)); f.mockReturnValue = (value: T) => // next function call will return specified return value or this one f.mockImplementation(() => value); - f.mockResolvedValue = (value: T) => - f.mockImplementation(() => Promise.resolve(value)); + f.mockResolvedValue = (value: Unpromisify) => + f.mockImplementation(() => Promise.resolve(value as T)); - f.mockRejectedValue = (value: T) => + f.mockRejectedValue = (value: unknown) => f.mockImplementation(() => Promise.reject(value)); f.mockImplementationOnce = (