1
- import React from 'react' ;
2
- import { mount } from 'enzyme ' ;
1
+ import React , { useState } from 'react' ;
2
+ import { render , fireEvent } from '@testing-library/react ' ;
3
3
import Tooltip from '../src' ;
4
4
5
- const verifyContent = ( wrapper , content ) => {
6
- expect ( wrapper . find ( '.x-content' ) . text ( ) ) . toBe ( content ) ;
7
- expect ( wrapper . find ( 'Trigger' ) . instance ( ) . getPopupDomNode ( ) ) . toBeTruthy ( ) ;
8
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
9
- expect ( wrapper . find ( '.rc-tooltip' ) . hostNodes ( ) . hasClass ( 'rc-tooltip-hidden' ) ) . toBe ( true ) ;
5
+ const verifyContent = ( wrapper : HTMLElement , content : string ) => {
6
+ expect ( wrapper . querySelector ( '.x-content' ) . textContent ) . toBe ( content ) ;
7
+ fireEvent . click ( wrapper . querySelector ( '.target' ) ) ;
8
+ expect ( wrapper . querySelector ( '.rc-tooltip' ) . classList . contains ( 'rc-tooltip-hidden' ) ) . toBe ( true ) ;
10
9
} ;
11
10
12
11
describe ( 'rc-tooltip' , ( ) => {
13
12
window . requestAnimationFrame = window . setTimeout ;
14
13
window . cancelAnimationFrame = window . clearTimeout ;
14
+ beforeEach ( ( ) => {
15
+ jest . useFakeTimers ( ) ;
16
+ } ) ;
17
+
18
+ afterEach ( ( ) => {
19
+ jest . useRealTimers ( ) ;
20
+ } ) ;
15
21
16
22
describe ( 'shows and hides itself on click' , ( ) => {
17
23
it ( 'using an element overlay' , ( ) => {
18
- const wrapper = mount (
24
+ const { container } = render (
19
25
< Tooltip
20
26
trigger = { [ 'click' ] }
21
27
placement = "left"
@@ -24,12 +30,12 @@ describe('rc-tooltip', () => {
24
30
< div className = "target" > Click this</ div >
25
31
</ Tooltip > ,
26
32
) ;
27
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
28
- verifyContent ( wrapper , 'Tooltip content' ) ;
33
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
34
+ verifyContent ( container , 'Tooltip content' ) ;
29
35
} ) ;
30
36
31
37
it ( 'using a function overlay' , ( ) => {
32
- const wrapper = mount (
38
+ const { container } = render (
33
39
< Tooltip
34
40
trigger = { [ 'click' ] }
35
41
placement = "left"
@@ -38,13 +44,13 @@ describe('rc-tooltip', () => {
38
44
< div className = "target" > Click this</ div >
39
45
</ Tooltip > ,
40
46
) ;
41
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
42
- verifyContent ( wrapper , 'Tooltip content' ) ;
47
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
48
+ verifyContent ( container , 'Tooltip content' ) ;
43
49
} ) ;
44
50
45
51
// https://github.com/ant-design/ant-design/pull/23155
46
52
it ( 'using style inner style' , ( ) => {
47
- const wrapper = mount (
53
+ const { container } = render (
48
54
< Tooltip
49
55
trigger = { [ 'click' ] }
50
56
placement = "left"
@@ -54,13 +60,15 @@ describe('rc-tooltip', () => {
54
60
< div className = "target" > Click this</ div >
55
61
</ Tooltip > ,
56
62
) ;
57
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
58
- expect ( wrapper . find ( '.rc-tooltip-inner' ) . props ( ) . style ) . toEqual ( { background : 'red' } ) ;
63
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
64
+ expect (
65
+ ( container . querySelector ( '.rc-tooltip-inner' ) as HTMLElement ) . style . background ,
66
+ ) . toEqual ( 'red' ) ;
59
67
} ) ;
60
68
61
69
it ( 'access of ref' , ( ) => {
62
70
const domRef = React . createRef ( ) ;
63
- mount (
71
+ render (
64
72
< Tooltip
65
73
trigger = { [ 'click' ] }
66
74
placement = "left"
@@ -74,14 +82,13 @@ describe('rc-tooltip', () => {
74
82
} ) ;
75
83
} ) ;
76
84
describe ( 'destroyTooltipOnHide' , ( ) => {
77
- const destroyVerifyContent = ( wrapper , content ) => {
78
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
79
- expect ( wrapper . find ( '.x-content' ) . text ( ) ) . toBe ( content ) ;
80
- expect ( wrapper . find ( 'Trigger' ) . instance ( ) . getPopupDomNode ( ) ) . toBeTruthy ( ) ;
81
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
85
+ const destroyVerifyContent = ( wrapper : HTMLElement , content : string ) => {
86
+ fireEvent . click ( wrapper . querySelector ( '.target' ) ) ;
87
+ expect ( wrapper . querySelector ( '.x-content' ) . textContent ) . toBe ( content ) ;
88
+ fireEvent . click ( wrapper . querySelector ( '.target' ) ) ;
82
89
} ;
83
90
it ( 'default value' , ( ) => {
84
- const wrapper = mount (
91
+ const { container } = render (
85
92
< Tooltip
86
93
trigger = { [ 'click' ] }
87
94
placement = "left"
@@ -90,11 +97,11 @@ describe('rc-tooltip', () => {
90
97
< div className = "target" > Click this</ div >
91
98
</ Tooltip > ,
92
99
) ;
93
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
94
- verifyContent ( wrapper , 'Tooltip content' ) ;
100
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
101
+ verifyContent ( container , 'Tooltip content' ) ;
95
102
} ) ;
96
103
it ( 'should only remove tooltip when value is true' , ( ) => {
97
- const wrapper = mount (
104
+ const { container } = render (
98
105
< Tooltip
99
106
destroyTooltipOnHide
100
107
trigger = { [ 'click' ] }
@@ -104,11 +111,11 @@ describe('rc-tooltip', () => {
104
111
< div className = "target" > Click this</ div >
105
112
</ Tooltip > ,
106
113
) ;
107
- destroyVerifyContent ( wrapper , 'Tooltip content' ) ;
108
- expect ( wrapper . html ( ) ) . toBe ( '<div class="target">Click this</div><div></div>' ) ;
114
+ destroyVerifyContent ( container , 'Tooltip content' ) ;
115
+ expect ( container . innerHTML ) . toBe ( '<div class="target">Click this</div><div></div>' ) ;
109
116
} ) ;
110
117
it ( 'should only remove tooltip when keepParent is true' , ( ) => {
111
- const wrapper = mount (
118
+ const { container } = render (
112
119
< Tooltip
113
120
destroyTooltipOnHide = { { keepParent : true } }
114
121
trigger = { [ 'click' ] }
@@ -118,11 +125,11 @@ describe('rc-tooltip', () => {
118
125
< div className = "target" > Click this</ div >
119
126
</ Tooltip > ,
120
127
) ;
121
- destroyVerifyContent ( wrapper , 'Tooltip content' ) ;
122
- expect ( wrapper . html ( ) ) . toBe ( '<div class="target">Click this</div><div></div>' ) ;
128
+ destroyVerifyContent ( container , 'Tooltip content' ) ;
129
+ expect ( container . innerHTML ) . toBe ( '<div class="target">Click this</div><div></div>' ) ;
123
130
} ) ;
124
131
it ( 'should remove tooltip and container when keepParent is false' , ( ) => {
125
- const wrapper = mount (
132
+ const { container } = render (
126
133
< Tooltip
127
134
destroyTooltipOnHide = { { keepParent : false } }
128
135
trigger = { [ 'click' ] }
@@ -132,48 +139,31 @@ describe('rc-tooltip', () => {
132
139
< div className = "target" > Click this</ div >
133
140
</ Tooltip > ,
134
141
) ;
135
- destroyVerifyContent ( wrapper , 'Tooltip content' ) ;
136
- expect ( wrapper . html ( ) ) . toBe ( '<div class="target">Click this</div>' ) ;
142
+ destroyVerifyContent ( container , 'Tooltip content' ) ;
143
+ expect ( container . innerHTML ) . toBe ( '<div class="target">Click this</div>' ) ;
137
144
} ) ;
138
145
} ) ;
139
146
140
- // This is only test for motion pass to internal rc-trigger
141
- // It's safe to remove since meaningless to rc-tooltip if refactor
142
- it ( 'should motion props work' , ( ) => {
143
- const wrapper = mount (
144
- < Tooltip overlay = "Light" motion = { { motionName : 'bamboo-is-light' } } >
145
- < span > Bamboo</ span >
146
- </ Tooltip > ,
147
- ) ;
148
-
149
- expect ( wrapper . find ( 'Trigger' ) . props ( ) . popupMotion ) . toEqual ( { motionName : 'bamboo-is-light' } ) ;
150
- } ) ;
151
-
152
147
it ( 'zIndex' , ( ) => {
153
148
jest . useFakeTimers ( ) ;
154
149
155
- const wrapper = mount (
150
+ const { container } = render (
156
151
< Tooltip trigger = { [ 'click' ] } zIndex = { 903 } overlay = "Bamboo" >
157
152
< div className = "target" > Light</ div >
158
153
</ Tooltip > ,
159
154
) ;
160
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
155
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
161
156
162
157
jest . runAllTimers ( ) ;
163
- wrapper . update ( ) ;
164
158
165
- expect ( wrapper . find ( 'div.rc-tooltip' ) . prop ( 'style' ) ) . toEqual (
166
- expect . objectContaining ( {
167
- zIndex : 903 ,
168
- } ) ,
169
- ) ;
159
+ expect ( ( container . querySelector ( 'div.rc-tooltip' ) as HTMLElement ) . style . zIndex ) . toBe ( '903' ) ;
170
160
171
161
jest . useRealTimers ( ) ;
172
162
} ) ;
173
163
174
164
describe ( 'showArrow' , ( ) => {
175
165
it ( 'should show tooltip arrow default' , ( ) => {
176
- const wrapper = mount (
166
+ const { container } = render (
177
167
< Tooltip
178
168
destroyTooltipOnHide = { { keepParent : false } }
179
169
trigger = { [ 'click' ] }
@@ -183,13 +173,13 @@ describe('rc-tooltip', () => {
183
173
< div className = "target" > Click this</ div >
184
174
</ Tooltip > ,
185
175
) ;
186
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
187
- expect ( wrapper . find ( '.rc-tooltip-content' ) . html ( ) ) . toBe (
176
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
177
+ expect ( container . querySelector ( '.rc-tooltip-content' ) . outerHTML ) . toBe (
188
178
'<div class="rc-tooltip-content"><div class="rc-tooltip-arrow"></div><div class="rc-tooltip-inner" role="tooltip"><strong class="x-content">Tooltip content</strong></div></div>' ,
189
179
) ;
190
180
} ) ;
191
181
it ( 'should show tooltip arrow when showArrow is true' , ( ) => {
192
- const wrapper = mount (
182
+ const { container } = render (
193
183
< Tooltip
194
184
destroyTooltipOnHide = { { keepParent : false } }
195
185
trigger = { [ 'click' ] }
@@ -200,13 +190,13 @@ describe('rc-tooltip', () => {
200
190
< div className = "target" > Click this</ div >
201
191
</ Tooltip > ,
202
192
) ;
203
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
204
- expect ( wrapper . find ( '.rc-tooltip-content' ) . html ( ) ) . toBe (
193
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
194
+ expect ( container . querySelector ( '.rc-tooltip-content' ) . outerHTML ) . toBe (
205
195
'<div class="rc-tooltip-content"><div class="rc-tooltip-arrow"></div><div class="rc-tooltip-inner" role="tooltip"><strong class="x-content">Tooltip content</strong></div></div>' ,
206
196
) ;
207
197
} ) ;
208
198
it ( 'should hide tooltip arrow when showArrow is false' , ( ) => {
209
- const wrapper = mount (
199
+ const { container } = render (
210
200
< Tooltip
211
201
destroyTooltipOnHide = { { keepParent : false } }
212
202
trigger = { [ 'click' ] }
@@ -217,23 +207,32 @@ describe('rc-tooltip', () => {
217
207
< div className = "target" > Click this</ div >
218
208
</ Tooltip > ,
219
209
) ;
220
- wrapper . find ( '.target' ) . simulate ( 'click' ) ;
221
- expect ( wrapper . find ( '.rc-tooltip-content' ) . html ( ) ) . toBe (
210
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
211
+ expect ( container . querySelector ( '.rc-tooltip-content' ) . outerHTML ) . toBe (
222
212
'<div class="rc-tooltip-content"><div class="rc-tooltip-inner" role="tooltip"><strong class="x-content">Tooltip content</strong></div></div>' ,
223
213
) ;
224
214
} ) ;
225
215
} ) ;
226
216
227
217
it ( 'visible' , ( ) => {
228
- const wrapper = mount (
229
- < Tooltip overlay = { < strong className = "x-content" > Tooltip content</ strong > } visible = { false } >
230
- < div />
231
- </ Tooltip > ,
232
- ) ;
218
+ const App = ( ) => {
219
+ const [ open , setOpen ] = useState ( false ) ;
220
+ return (
221
+ < Tooltip overlay = { < strong className = "x-content" > Tooltip content</ strong > } visible = { open } >
222
+ < div
223
+ className = "target"
224
+ onClick = { ( ) => {
225
+ setOpen ( true ) ;
226
+ } }
227
+ />
228
+ </ Tooltip >
229
+ ) ;
230
+ } ;
231
+ const { container } = render ( < App /> ) ;
233
232
234
- expect ( wrapper . exists ( '.x-content' ) ) . toBeFalsy ( ) ;
233
+ expect ( container . querySelector ( '.x-content' ) ) . toBeFalsy ( ) ;
235
234
236
- wrapper . setProps ( { visible : true } ) ;
237
- expect ( wrapper . exists ( '.x-content' ) ) . toBeTruthy ( ) ;
235
+ fireEvent . click ( container . querySelector ( '.target' ) ) ;
236
+ expect ( container . querySelector ( '.x-content' ) ) . toBeTruthy ( ) ;
238
237
} ) ;
239
238
} ) ;
0 commit comments