React Router v6 createMemoryRouter测试Outlet未渲染问题求助
问题原因及解决方案
核心问题1:initialIndex设置错误
测试代码里的initialIndex: 1是错误的——initialEntries: ['/']是长度为1的数组,索引从0开始,设置initialIndex:1会让路由处于不存在的条目位置,导致子路由无法被正确匹配,Outlet也就不会渲染Home组件。
核心问题2:未等待懒加载组件完成渲染
Home组件通过lazy懒加载,测试时需要等待Suspense完成组件加载渲染,否则debug时组件可能还未加载完毕,导致main标签为空。
修改后的测试代码
it('should navigate to Home', async () => { const router = createMemoryRouter(routes, { initialEntries: ['/'], // 移除错误的initialIndex,默认值0即可匹配唯一的路由条目 }); const { debug, findByText } = render( <RouterProvider router={router} /> ); // 等待Home组件加载并渲染出目标文本 await findByText('Home page'); debug(undefined, Infinity); });
额外检查点
- 确保测试环境支持React Suspense(React Testing Library v12+默认支持)
- 路由配置里的子路由
path: ''本身没问题,和createBrowserRouter的匹配逻辑一致,无需修改
内容的提问来源于stack exchange,提问作者que1326
相关产品推荐
相关产品推荐

