升级React Router v7后,RTL测试嵌套路由时Outlet不渲染
解决RTL测试嵌套路由时Outlet不渲染的问题
针对你遇到的测试中Outlet无法正常渲染的问题,给你几个具体的修正方案:
1. 用RTL异步查询替代waitFor
waitFor在这里属于冗余用法,RTL自带的findByText本身就是专为异步渲染场景设计的查询方法,能直接处理路由初始化后的组件渲染延迟。修改测试代码如下:
describe("sample code ", () => { it("test about route", async () => { // 修正测试名称对应实际测试路由,避免混淆 const router1 = createMemoryRouter(routes, { initialEntries: ['/about'] }) render(<RouterProvider router={router1} />); expect(screen.getByText(/header/i)).toBeInTheDocument(); // 直接await findByText,无需额外包裹waitFor expect(await screen.findByText(/about/i)).toBeInTheDocument(); expect(screen.getByText(/footer/i)).toBeInTheDocument(); }) })
2. 确认路由配置匹配逻辑
你的路由配置本身没有问题:根路由/挂载Layout,子路由about对应路径/about,initialEntries的路径匹配逻辑是正确的。后续测试其他路由时,只需保证initialEntries的路径和路由配置一致即可。
3. 对齐React Router版本
createMemoryRouter是React Router v6.4及以上版本的API,虽然你实际应用运行正常,但如果测试环境的react-router-dom版本和开发环境不一致,也可能导致渲染异常。请确认依赖版本统一。
经过以上调整,测试就能正确渲染Outlet对应的子路由内容了。
内容的提问来源于stack exchange,提问作者NAVEED
相关产品推荐
相关产品推荐

