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: ...,}));