Mocking react-router-dom for useHistory hook causes the following error - TS2698: Spread types may only be created from object types Mocking react-router-dom for useHistory hook causes the following error - TS2698: Spread types may only be created from object types typescript typescript

Mocking react-router-dom for useHistory hook causes the following error - TS2698: Spread types may only be created from object types


jest.requireActual returns unknown type that cannot be spread.

A correct type is:

import * as ReactRouterDom from 'react-router-dom';jest.mock('react-router-dom', () => ({  ...jest.requireActual('react-router-dom') as typeof ReactRouterDom,  useHistory: ...,}));

A quick fix is any:

jest.mock('react-router-dom', () => ({  ...jest.requireActual('react-router-dom') as any,  useHistory: ...,}));

It's acceptable because it doesn't impair type safety in this case.

Since react-router-dom is ES module, a more correct way to mock it is:

jest.mock('react-router-dom', () => ({  ...jest.requireActual('react-router-dom') as any,  __esModule: true,  useHistory: ...,}));