我正在嘗試模擬來自
我的模擬和測驗的鉤子replace函式,如下所示:useRouter()next/router
jest.mock("next/router", () => ({
useRouter() {
return {
route: "/",
pathname: "",
locale: "pl",
replace: jest
.fn()
.mockImplementation((obj) => console.log("have been called", obj)),
};
},
}));
const routerReplace = jest.spyOn(useRouter(), "replace");
test.only("should redirect when form submitted with success", async () => {
render(<HomePage {...props} />);
const routerReplace = jest.spyOn(useRouter(), "replace");
const submitBtn = screen.getByRole("button", {
name: /submit/i,
});
userEvent.click(submitBtn);
//doesn't work
await waitFor(() => expect(routerReplace).toHaveBeenCalled());
// I tried also this
//await waitFor(() =>
// expect(useRouter().replace).toHaveBeenCalledTimes(1)
//);
});
我可以在控制臺中看到它已被呼叫,但測驗未通過。
uj5u.com熱心網友回復:
我以我窺探的方式解決它useRouter,并在創建模擬后呈現頁面
test.only("should redirect when form submitted with success", async () => {
const useRouter = jest
.spyOn(require("next/router"), "useRouter")
.mockReturnValue({
...useRouterProps,
});
const routerReplace = jest.spyOn(useRouter(), "replace");
render(<HomePage {...props} />);
const submitBtn = screen.getByRole("button", {
name: /submit/i,
});
userEvent.click(submitBtn);
await waitFor(() => expect(routerReplace).toHaveBeenCalled());
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/372146.html
