从v5到v6:React Router测试用例重构踩坑总结
React Router v6作为React生态中最重要的路由库之一,其升级带来了许多Breaking Change。在实际项目迁移过程中,我们遇到了不少测试用例需要重构的问题。
主要问题点
1. BrowserRouter的使用方式变更 v5中可以这样使用:
import { BrowserRouter as Router } from 'react-router-dom';
<Router>
<App />
</Router>
v6中推荐使用createBrowserRouter配合RouterProvider,这导致测试用例中的render方式需要重构。
2. Route组件结构变化 v5中:
<Route path="/home" component={Home} />
v6中改为:
<Route path="/home" element={<Home />} />
3. 测试用例重构关键步骤 首先,需要引入@testing-library/react的render方法,并使用MemoryRouter进行测试:
import { render } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
const renderWithRouter = (component, { initialEntries = ['/'] } = {}) => {
return render(<MemoryRouter initialEntries={initialEntries}>{component}</MemoryRouter>);
};
4. 路由嵌套测试注意事项 在v6中,Routes组件被移除,使用useRoutes或直接在Route中定义嵌套路由。如果测试中涉及多个层级路由,需要确保所有路径都能正确匹配。
实践建议
建议在升级前先备份测试用例,然后逐步重构,并使用react-router-dom/test-utils中的辅助函数来帮助测试。同时,注意对useNavigate等hooks的测试也要相应调整。

讨论