1
1
import * as React from "react" ;
2
- import { create as createTestRenderer } from "react-test-renderer" ;
2
+ import * as ReactDOM from "react-dom" ;
3
+ import { act } from "react-dom/test-utils" ;
3
4
import {
4
5
MemoryRouter as Router ,
5
6
Outlet ,
@@ -9,6 +10,17 @@ import {
9
10
} from "react-router" ;
10
11
11
12
describe ( "nested routes" , ( ) => {
13
+ let node : HTMLDivElement ;
14
+ beforeEach ( ( ) => {
15
+ node = document . createElement ( "div" ) ;
16
+ document . body . appendChild ( node ) ;
17
+ } ) ;
18
+
19
+ afterEach ( ( ) => {
20
+ document . body . removeChild ( node ) ;
21
+ node = null ! ;
22
+ } ) ;
23
+
12
24
it ( "gets all params from parent routes" , ( ) => {
13
25
function Users ( ) {
14
26
return (
@@ -43,30 +55,32 @@ describe("nested routes", () => {
43
55
}
44
56
45
57
function Course ( ) {
46
- // We should be able to access the username param here
47
- // even though it was defined in a parent route from
48
- // another set of <Routes>
58
+ // We should be able to access the username param here even though it was
59
+ // defined in a parent route from another set of <Routes>
49
60
let { username, courseId } = useParams ( ) ;
50
61
return (
51
62
< div >
52
- < h1 >
63
+ < h1 id = "course" >
53
64
User: { username } , course { courseId }
54
65
</ h1 >
55
66
</ div >
56
67
) ;
57
68
}
58
69
59
- let renderer = createTestRenderer (
60
- < Router initialEntries = { [ "/users/michael/courses/routing" ] } >
61
- < Routes >
62
- < Route path = "users" element = { < Users /> } >
63
- < Route path = ":username/*" element = { < User /> } />
64
- </ Route >
65
- </ Routes >
66
- </ Router >
67
- ) ;
70
+ act ( ( ) => {
71
+ ReactDOM . render (
72
+ < Router initialEntries = { [ "/users/michael/courses/routing" ] } >
73
+ < Routes >
74
+ < Route path = "users" element = { < Users /> } >
75
+ < Route path = ":username/*" element = { < User /> } />
76
+ </ Route >
77
+ </ Routes >
78
+ </ Router > ,
79
+ node
80
+ ) ;
81
+ } ) ;
68
82
69
- expect ( renderer . toJSON ( ) ) . not . toBeNull ( ) ;
70
- expect ( renderer . toJSON ( ) ) . toMatchSnapshot ( ) ;
83
+ let elem = document . querySelector < HTMLHeadingElement > ( "#course" ) ! ;
84
+ expect ( elem . innerHTML ) . toBe ( "User: michael, course routing" ) ;
71
85
} ) ;
72
86
} ) ;
0 commit comments