如何监视和测试是否“ Usenavigate”是否方法称为或不称为React-Router-dom软件包
我正在尝试添加React-Router-Dom软件包的“ Usenavigate”方法,以测试其在导航时是否被调用。但是我会遇到此错误“ TypeError:不能重新定义属性:USENAVIGATE”
app.js
const navigate = useNavigate();
.......
return (
<a href="" data-testid={recipe.id} onClick={() => {
console.log("called");
navigate(`/recipes/edit/${recipe.id}`, {state: {recipe: recipe}});
}}>
Edit
</a>
app.test.js,
import * as ReactRouterDom from "react-router-dom";
const useNavigateSpy = jest.spyOn(ReactRouterDom, "useNavigate");
it("clicking on edit takes to edit view", async() => {
useNavigateSpy.mockImplementation(() => jest.fn());
await act(async () =>
render(<BrowserRouter>
<List />
</BrowserRouter>));
const user = userEvent.setup();
await user.click(screen.getByTestId("R1"));
expect(useNavigateSpy).toHaveBeenCalled();
});
我可以看到“呼叫”正在打印,所以单击是有效的,但是是的,我无法测试是否navegate是被打电话。
任何指导都将真正有用。
I am trying to add spy on "useNavigate" method of react-router-dom package to test whether its being called or not on navigation. But I am getting this error "TypeError: Cannot redefine property: useNavigate"
app.js
const navigate = useNavigate();
.......
return (
<a href="" data-testid={recipe.id} onClick={() => {
console.log("called");
navigate(`/recipes/edit/${recipe.id}`, {state: {recipe: recipe}});
}}>
Edit
</a>
app.test.js
import * as ReactRouterDom from "react-router-dom";
const useNavigateSpy = jest.spyOn(ReactRouterDom, "useNavigate");
it("clicking on edit takes to edit view", async() => {
useNavigateSpy.mockImplementation(() => jest.fn());
await act(async () =>
render(<BrowserRouter>
<List />
</BrowserRouter>));
const user = userEvent.setup();
await user.click(screen.getByTestId("R1"));
expect(useNavigateSpy).toHaveBeenCalled();
});
I can see that that "called" is getting printed, so click is working but yes I am not able to test if navigate is getting called or not.
Any guidance will be really useful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在不监视Usenavigate的情况下做到这一点,而是通过嘲笑它。这是您可以做到的(例如用打字稿):
我用来提出此响应的资源:
https://stackoverflow.com/a/66950016
You can do that without spying on useNavigate but by mocking it. Here is how you can do it (example with TypeScript):
The resources I used to come up with this response:
https://stackoverflow.com/a/66950016