|
5 | 5 | Routes, |
6 | 6 | Route, |
7 | 7 | useOutlet, |
8 | | - useOutletContext |
| 8 | + useOutletContext, |
| 9 | + Outlet |
9 | 10 | } from "react-router"; |
10 | 11 |
|
11 | 12 | describe("useOutlet", () => { |
@@ -268,4 +269,88 @@ describe("useOutlet", () => { |
268 | 269 | `); |
269 | 270 | }); |
270 | 271 | }); |
| 272 | + |
| 273 | + describe("when child route without element prop", () => { |
| 274 | + it("returns nested route element", () => { |
| 275 | + function Layout() { |
| 276 | + return useOutlet(); |
| 277 | + } |
| 278 | + |
| 279 | + let renderer: TestRenderer.ReactTestRenderer; |
| 280 | + TestRenderer.act(() => { |
| 281 | + renderer = TestRenderer.create( |
| 282 | + <MemoryRouter initialEntries={["/users/profile"]}> |
| 283 | + <Routes> |
| 284 | + <Route path="/" element={<Layout />}> |
| 285 | + <Route path="users"> |
| 286 | + <Route path="profile" element={<h1>Profile</h1>} /> |
| 287 | + </Route> |
| 288 | + </Route> |
| 289 | + </Routes> |
| 290 | + </MemoryRouter> |
| 291 | + ); |
| 292 | + }); |
| 293 | + |
| 294 | + expect(renderer.toJSON()).toMatchInlineSnapshot(` |
| 295 | + <h1> |
| 296 | + Profile |
| 297 | + </h1> |
| 298 | + `); |
| 299 | + }); |
| 300 | + |
| 301 | + it("returns the context", () => { |
| 302 | + function Layout() { |
| 303 | + return useOutlet(["Mary", "Jane", "Michael"]); |
| 304 | + } |
| 305 | + |
| 306 | + function Profile() { |
| 307 | + let outletContext = useOutletContext<string[]>(); |
| 308 | + |
| 309 | + return ( |
| 310 | + <div> |
| 311 | + <h1>Profile</h1> |
| 312 | + <ul> |
| 313 | + {outletContext.map(name => ( |
| 314 | + <li key={name}>{name}</li> |
| 315 | + ))} |
| 316 | + </ul> |
| 317 | + </div> |
| 318 | + ); |
| 319 | + } |
| 320 | + |
| 321 | + let renderer: TestRenderer.ReactTestRenderer; |
| 322 | + TestRenderer.act(() => { |
| 323 | + renderer = TestRenderer.create( |
| 324 | + <MemoryRouter initialEntries={["/users/profile"]}> |
| 325 | + <Routes> |
| 326 | + <Route path="/" element={<Layout />}> |
| 327 | + <Route path="users"> |
| 328 | + <Route path="profile" element={<Profile />} /> |
| 329 | + </Route> |
| 330 | + </Route> |
| 331 | + </Routes> |
| 332 | + </MemoryRouter> |
| 333 | + ); |
| 334 | + }); |
| 335 | + |
| 336 | + expect(renderer.toJSON()).toMatchInlineSnapshot(` |
| 337 | + <div> |
| 338 | + <h1> |
| 339 | + Profile |
| 340 | + </h1> |
| 341 | + <ul> |
| 342 | + <li> |
| 343 | + Mary |
| 344 | + </li> |
| 345 | + <li> |
| 346 | + Jane |
| 347 | + </li> |
| 348 | + <li> |
| 349 | + Michael |
| 350 | + </li> |
| 351 | + </ul> |
| 352 | + </div> |
| 353 | + `); |
| 354 | + }); |
| 355 | + }); |
271 | 356 | }); |
0 commit comments