【发布时间】:2022-06-22 22:59:45
【问题描述】:
我被困了几个小时试图测试一个简单的页面,我正在使用 "react-router-dom": "^6.3.0"
我有这个要测试的组件:
const Main: React.FC = () => {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<div>Home</div>}></Route>
<Route
path={"about"}
element={<div>About</div>}
/>
</Routes>
</BrowserRouter>
)
}
export default Main
效果很好,然后我有 Main.test.tsx
const renderWithRouter = (ui: React.ReactElement, { route = '/' } = {}) => {
window.history.pushState({}, 'Test page', route)
return {
user,
...render(ui, { wrapper: BrowserRouter }),
}
}
describe('Main', () => {
beforeEach(() => {
renderWithRouter(<Main />, { route: '/about' })
})
test('should land on about page', async () => {
await screen.findByText('about')
})
})
但我收到了这个错误
Error: Uncaught [Error: You cannot render a <Router> inside another <Router>. You should never have more than one in your app.]
有什么线索吗?
【问题讨论】:
-
因为
renderWithRouter正在用另一个BrowserRouter包装一个已经包含BrowserRouter的组件。我通常将路由器移至index.tsx文件,正是为了方便测试依赖于路由器上下文的所有其他组件。
标签: javascript reactjs react-router-dom