运行 单元测试时出错 "You should not use <Link> outside a <Router>"
Error when running unit test "You should not use <Link> outside a <Router>"
我这里有一个单元测试,我正在执行一个点击事件。我收到错误:
Invariant failed: You should not use <Link> outside a <Router>
describe("when the menu icon has been clicked", () => {
test("the account menu should be displayed", () => {
const { getByTestId } = render(<AccountMenu userDetails={fakeUser}></AccountMenu>);
const button = getByTestId("button-icon-element");
fireEvent.click(button);
screen.debug();
});
});
我很确定我知道它为什么哭,但想知道在单元测试时是否有一种简单的方法来解决这个问题。
我使用的单元测试框架是 @testing-libary/react
.
您需要将任何正在测试的元素包装在 BrowserRouter 中。
const { getByTestId } = render(<BrowserRouter><AccountMenu userDetails={fakeUser}></AccountMenu></BrowserRouter>);
然后就可以点击了
您可以创建一个包装器组件来使用 BrowserRouter
const Wrapper = ({ children }) => {
return (
<BrowserRouter>
{children}
</BrowserRouter>
);
};
const renderWithRouter = (ui) => {
return render(ui, { wrapper: Wrapper});
};
然后你可以这样使用它:
const { getByTestId } = renderWithRouter(<AccountMenu userDetails={fakeUser} />)
我这里有一个单元测试,我正在执行一个点击事件。我收到错误:
Invariant failed: You should not use <Link> outside a <Router>
describe("when the menu icon has been clicked", () => {
test("the account menu should be displayed", () => {
const { getByTestId } = render(<AccountMenu userDetails={fakeUser}></AccountMenu>);
const button = getByTestId("button-icon-element");
fireEvent.click(button);
screen.debug();
});
});
我很确定我知道它为什么哭,但想知道在单元测试时是否有一种简单的方法来解决这个问题。
我使用的单元测试框架是 @testing-libary/react
.
您需要将任何正在测试的元素包装在 BrowserRouter 中。
const { getByTestId } = render(<BrowserRouter><AccountMenu userDetails={fakeUser}></AccountMenu></BrowserRouter>);
然后就可以点击了
您可以创建一个包装器组件来使用 BrowserRouter
const Wrapper = ({ children }) => {
return (
<BrowserRouter>
{children}
</BrowserRouter>
);
};
const renderWithRouter = (ui) => {
return render(ui, { wrapper: Wrapper});
};
然后你可以这样使用它:
const { getByTestId } = renderWithRouter(<AccountMenu userDetails={fakeUser} />)