模拟的useNavigate不工作代码示例

83 阅读1分钟

我有一个Login.js,其中我从react-router-dom导入了useNavigate。我在功能组件的顶层调用了一个useNavigate钩子,就像这样。const navigate = useNavigate();

然后我又像这样使用它。<div onClick={() => navigate("/register")}>Create</div>

我试图用jest和react-testing-library来测试这段代码,没有mock也能正常工作,但当我用mocked useNavigate这样的方式来尝试时:

test('test navigate to register', () => { 
    const mockedUsedNavigate = jest.fn();
    jest.mock('react-router-dom', () => ({
        ...jest.requireActual('react-router-dom'),
        useNavigate: () => mockedUsedNavigate
      }));

      render(
       <Router>
         <Login />
       </Router>,
       );

    const registerButton = screen.getByText(/Create/i);
    fireEvent.click(registerButton);
    expect(mockedUsedNavigate).toHaveBeenCalled();
}); 

测试就失败了:

expect(jest.fn()).toHaveBeenCalled()

    Expected number of calls: >= 1
    Received number of calls:    0

这到底是什么问题?