我有一个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
这到底是什么问题?