@@ -18,7 +18,7 @@ describe('userEvent.press with fake timers', () => {
18
18
jest . setSystemTime ( 0 ) ;
19
19
} ) ;
20
20
21
- test ( 'calls onPressIn, onPress and onPressOut prop of touchable ' , async ( ) => {
21
+ test ( 'works on Pressable ' , async ( ) => {
22
22
const { events, logEvent } = createEventLogger ( ) ;
23
23
const user = userEvent . setup ( ) ;
24
24
@@ -31,11 +31,80 @@ describe('userEvent.press with fake timers', () => {
31
31
testID = "pressable"
32
32
/> ,
33
33
) ;
34
- await user . press ( screen . getByTestId ( 'pressable' ) ) ;
35
34
35
+ await user . press ( screen . getByTestId ( 'pressable' ) ) ;
36
+ expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'pressOut' , 'press' ] ) ;
36
37
expect ( events ) . toMatchSnapshot ( ) ;
37
38
} ) ;
38
39
40
+ test ( 'works on TouchableOpacity' , async ( ) => {
41
+ const mockOnPress = jest . fn ( ) ;
42
+
43
+ render (
44
+ < TouchableOpacity onPress = { mockOnPress } >
45
+ < Text > press me</ Text >
46
+ </ TouchableOpacity > ,
47
+ ) ;
48
+
49
+ await userEvent . press ( screen . getByText ( 'press me' ) ) ;
50
+ expect ( mockOnPress ) . toHaveBeenCalled ( ) ;
51
+ } ) ;
52
+
53
+ test ( 'works on TouchableHighlight' , async ( ) => {
54
+ const mockOnPress = jest . fn ( ) ;
55
+
56
+ render (
57
+ < TouchableHighlight onPress = { mockOnPress } >
58
+ < Text > press me</ Text >
59
+ </ TouchableHighlight > ,
60
+ ) ;
61
+
62
+ await userEvent . press ( screen . getByText ( 'press me' ) ) ;
63
+ expect ( mockOnPress ) . toHaveBeenCalled ( ) ;
64
+ } ) ;
65
+
66
+ test ( 'works on Text' , async ( ) => {
67
+ const { events, logEvent } = createEventLogger ( ) ;
68
+
69
+ render (
70
+ < Text
71
+ onPress = { logEvent ( 'press' ) }
72
+ onPressIn = { logEvent ( 'pressIn' ) }
73
+ onPressOut = { logEvent ( 'pressOut' ) }
74
+ onLongPress = { logEvent ( 'longPress' ) }
75
+ >
76
+ press me
77
+ </ Text > ,
78
+ ) ;
79
+
80
+ await userEvent . press ( screen . getByText ( 'press me' ) ) ;
81
+ expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'pressOut' , 'press' ] ) ;
82
+ } ) ;
83
+
84
+ test ( 'works on TextInput' , async ( ) => {
85
+ const { events, logEvent } = createEventLogger ( ) ;
86
+
87
+ render (
88
+ < TextInput
89
+ placeholder = "email"
90
+ onPressIn = { logEvent ( 'pressIn' ) }
91
+ onPressOut = { logEvent ( 'pressOut' ) }
92
+ /> ,
93
+ ) ;
94
+
95
+ await userEvent . press ( screen . getByPlaceholderText ( 'email' ) ) ;
96
+ expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'pressOut' ] ) ;
97
+ } ) ;
98
+
99
+ test ( 'works on Button' , async ( ) => {
100
+ const { events, logEvent } = createEventLogger ( ) ;
101
+
102
+ render ( < Button title = "press me" onPress = { logEvent ( 'press' ) } /> ) ;
103
+
104
+ await userEvent . press ( screen . getByText ( 'press me' ) ) ;
105
+ expect ( getEventsNames ( events ) ) . toEqual ( [ 'press' ] ) ;
106
+ } ) ;
107
+
39
108
test ( 'does not trigger event when pressable is disabled' , async ( ) => {
40
109
const { events, logEvent } = createEventLogger ( ) ;
41
110
const user = userEvent . setup ( ) ;
@@ -129,7 +198,7 @@ describe('userEvent.press with fake timers', () => {
129
198
) ;
130
199
await user . press ( screen . getByTestId ( 'pressable' ) ) ;
131
200
132
- expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'press ' , 'pressOut ' ] ) ;
201
+ expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'pressOut ' , 'press ' ] ) ;
133
202
} ) ;
134
203
135
204
test ( 'crawls up in the tree to find an element that responds to touch events' , async ( ) => {
@@ -158,59 +227,6 @@ describe('userEvent.press with fake timers', () => {
158
227
expect ( mockOnLongPress ) . not . toHaveBeenCalled ( ) ;
159
228
} ) ;
160
229
161
- test ( 'works on TouchableOpacity' , async ( ) => {
162
- const mockOnPress = jest . fn ( ) ;
163
-
164
- render (
165
- < TouchableOpacity onPress = { mockOnPress } >
166
- < Text > press me</ Text >
167
- </ TouchableOpacity > ,
168
- ) ;
169
- await userEvent . press ( screen . getByText ( 'press me' ) ) ;
170
-
171
- expect ( mockOnPress ) . toHaveBeenCalled ( ) ;
172
- } ) ;
173
-
174
- test ( 'works on TouchableHighlight' , async ( ) => {
175
- const mockOnPress = jest . fn ( ) ;
176
-
177
- render (
178
- < TouchableHighlight onPress = { mockOnPress } >
179
- < Text > press me</ Text >
180
- </ TouchableHighlight > ,
181
- ) ;
182
- await userEvent . press ( screen . getByText ( 'press me' ) ) ;
183
-
184
- expect ( mockOnPress ) . toHaveBeenCalled ( ) ;
185
- } ) ;
186
-
187
- test ( 'press works on Text' , async ( ) => {
188
- const { events, logEvent } = createEventLogger ( ) ;
189
-
190
- render (
191
- < Text
192
- onPress = { logEvent ( 'press' ) }
193
- onPressIn = { logEvent ( 'pressIn' ) }
194
- onPressOut = { logEvent ( 'pressOut' ) }
195
- onLongPress = { logEvent ( 'longPress' ) }
196
- >
197
- press me
198
- </ Text > ,
199
- ) ;
200
-
201
- await userEvent . press ( screen . getByText ( 'press me' ) ) ;
202
- expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'press' , 'pressOut' ] ) ;
203
- } ) ;
204
-
205
- test ( 'press works on Button' , async ( ) => {
206
- const { events, logEvent } = createEventLogger ( ) ;
207
-
208
- render ( < Button title = "press me" onPress = { logEvent ( 'press' ) } /> ) ;
209
-
210
- await userEvent . press ( screen . getByText ( 'press me' ) ) ;
211
- expect ( getEventsNames ( events ) ) . toEqual ( [ 'press' ] ) ;
212
- } ) ;
213
-
214
230
test ( 'longPress works Text' , async ( ) => {
215
231
const { events, logEvent } = createEventLogger ( ) ;
216
232
@@ -268,36 +284,6 @@ describe('userEvent.press with fake timers', () => {
268
284
expect ( events ) . toEqual ( [ ] ) ;
269
285
} ) ;
270
286
271
- test ( 'press works on TextInput' , async ( ) => {
272
- const { events, logEvent } = createEventLogger ( ) ;
273
-
274
- render (
275
- < TextInput
276
- placeholder = "email"
277
- onPressIn = { logEvent ( 'pressIn' ) }
278
- onPressOut = { logEvent ( 'pressOut' ) }
279
- /> ,
280
- ) ;
281
-
282
- await userEvent . press ( screen . getByPlaceholderText ( 'email' ) ) ;
283
- expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'pressOut' ] ) ;
284
- } ) ;
285
-
286
- test ( 'longPress works on TextInput' , async ( ) => {
287
- const { events, logEvent } = createEventLogger ( ) ;
288
-
289
- render (
290
- < TextInput
291
- placeholder = "email"
292
- onPressIn = { logEvent ( 'pressIn' ) }
293
- onPressOut = { logEvent ( 'pressOut' ) }
294
- /> ,
295
- ) ;
296
-
297
- await userEvent . longPress ( screen . getByPlaceholderText ( 'email' ) ) ;
298
- expect ( getEventsNames ( events ) ) . toEqual ( [ 'pressIn' , 'pressOut' ] ) ;
299
- } ) ;
300
-
301
287
test ( 'does not call onPressIn and onPressOut on non editable TextInput' , async ( ) => {
302
288
const { events, logEvent } = createEventLogger ( ) ;
303
289
@@ -372,3 +358,27 @@ describe('userEvent.press with fake timers', () => {
372
358
expect ( consoleErrorSpy ) . not . toHaveBeenCalled ( ) ;
373
359
} ) ;
374
360
} ) ;
361
+
362
+ function Component ( ) {
363
+ const [ mounted , setMounted ] = React . useState ( true ) ;
364
+
365
+ const onPressIn = ( ) => {
366
+ setMounted ( false ) ;
367
+ } ;
368
+
369
+ return (
370
+ < View >
371
+ { mounted && (
372
+ < Pressable onPressIn = { onPressIn } >
373
+ < Text > Unmount</ Text >
374
+ </ Pressable >
375
+ ) }
376
+ </ View >
377
+ ) ;
378
+ }
379
+
380
+ test ( 'unmounts component' , async ( ) => {
381
+ render ( < Component /> ) ;
382
+ await userEvent . press ( screen . getByText ( 'Unmount' ) ) ;
383
+ expect ( screen . queryByText ( 'Unmount' ) ) . not . toBeOnTheScreen ( ) ;
384
+ } ) ;
0 commit comments