reactjs - Hur man återanvänder jest-mock av react-routers useHistory


Jag testar useHistory från react-router-dom i mitt test på detta sätt:

jest.mock("react-router-dom", () => ({
  useHistory: () => ({
    length: 13,
    push: jest.fn(),
    block: jest.fn(),
    createHref: jest.fn(),
    go: jest.fn(),
    goBack: jest.fn(),
    goForward: jest.fn(),
    liten: jest.fn(),
    replace: jest.fn(),
    action: "REPLACE",
    location: null
  })
}));

Detta fungerar alldeles utmärkt i ett enstaka test, men jag behöver detta för i princip varje test och jag vill inte kopiera det varje gång.

Hur kan jag återanvända denna mock? Jag har försökt det uppenbara, flytta den till en annan fil och exportera en funktion som skapar mocken:

export default() => jest.mock("react-router-dom",() => ({...})

Men att importera det och anropa funktionen för att skapa mocken resulterar i ett fel.

import useHistoryMock from "../../../testUtils/hooks/useHistory";
useHistoryMock()

Min komponentimplementation kastar då TypeError: Cannot read property 'history' of undefined, vilket den inte gör om jag definierar mocken i testfilen själv.

Vad är ett bekvämt sätt att återanvända mocken? Jag använder TypeScript, så helst vill jag inte bryta några kompilatorregler.

Svar #1

Du kan prova med __mocks__-mappen https://jestjs.io/docs/en/manual-mocks.html

Relaterade artiklar