如何重用React-Router的useHistory的笑话模拟

问题描述 投票:0回答:1

我在测试中嘲笑useHistoryreact-router-dom

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
  })
}));

这在单个测试中效果很好,但是基本上每个测试都需要它,我不想每次都复制它。

如何重用此模拟程序?我尝试了显而易见的方法,将其移至其他文件并导出创建模拟的函数:

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

但是,导入它并调用函数以创建模拟结果会导致错误。

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

然后我的组件实现抛出TypeError: Cannot read property 'history' of undefined,如果我在测试文件本身中定义了模拟,则不会。[>

重用模拟的便捷方法是什么?我正在使用打字稿,因此最好不要破坏任何编译器规则。

我在我的测试中像这样嘲笑react-router-dom的useHistory:jest.mock(“ react-router-dom”,()=>({useCistory:()=>({ :jest.fn(),块:jest.fn(),...

reactjs typescript react-router jest
1个回答
0
投票

您可以尝试使用__mocks__文件夹https://jestjs.io/docs/en/manual-mocks.html

© www.soinside.com 2019 - 2024. All rights reserved.