我有一个组件,它使用React Router v6的useNavigate
钩子允许用户在历史记录中向后导航。然而,当我用navigate(-1)
调用该函数时,测试似乎会失败,但如果我传递一个字符串URL,例如navigate("/home")
,则测试通过。有人知道如何正确测试navigate(-1)
吗? 这里是一个CodeSandbox来说明这个问题:https://codesandbox.io/s/navigate-back-test-yt82g3?file=/src/navigateBack.test.tsx
import { renderWithRouter } from "./testUtils";
import { screen } from "@testing-library/react";
it("goes back", () => {
function Home() {
let navigate = useNavigate();
function handleClick() {
navigate("/about");
}
return (
<div>
<h1>Home</h1>
<button onClick={handleClick}>about me</button>
</div>
);
}
function About() {
let navigate = useNavigate();
function handleClick() {
navigate(-1); // test failed
// navigate("/home"); // test passed
}
return (
<div>
<h1>About</h1>
<button onClick={handleClick}>go back</button>
</div>
);
}
const { user } = renderWithRouter(
<Routes>
<Route path="home" element={<Home />} />
<Route path="about" element={<About />} />
</Routes>,
{
route: "/home"
}
);
user.click(screen.getByText(/about me/i));
user.click(screen.getByText(/go back/i));
expect(window.location.pathname).toBe("/home");
});
MemoryRouter
进行节点环境的单元测试的关键所在,它并不与任何外部内容耦合,但是是的,在codesandbox中,这个单元测试似乎是有问题的。 - undefined