You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:25:21