在React Router v6升级过程中,我们遇到了测试覆盖率显著下降的问题。本文将详细记录从v5到v6迁移时的踩坑经历。
问题背景
升级前使用React Router v5,测试覆盖率维持在85%以上。升级至v6后,覆盖率骤降至40%,主要原因是v6对路由组件的渲染方式发生了重大变化。
核心问题复现步骤
- Route组件重构:v6中Route组件不再直接接收
component属性,需要使用element属性替换
// v5写法 - 已废弃
<Route path="/user" component={UserComponent} />
// v6写法 - 正确方式
<Route path="/user" element={<UserComponent />} />
- 嵌套路由问题:v6中使用
useRoutes和Routes组件后,测试用例需要调整
// 错误的测试方式
const wrapper = mount(<MemoryRouter><App /></MemoryRouter>);
// 正确的测试方式
const wrapper = render(<BrowserRouter><App /></BrowserRouter>);
解决方案
- 重构所有路由组件,使用新的
element属性 - 更新测试用例,使用
render而非mount进行渲染 - 使用
screen.getByText()等query方法替代之前的查找方式
实践建议
建议在升级前先制定详细的迁移计划,并逐步重构,避免一次性大范围改动导致测试覆盖问题。

讨论