1
1
import React from 'react' ;
2
+ import 'jest-native/extend-expect' ;
2
3
import { Button , Image , Text , TextInput , TouchableHighlight } from 'react-native' ;
3
4
4
- import { render , fireEvent } from '../' ;
5
- import { NativeEvent } from '../events' ;
5
+ import { render , fireEvent , getEventHandlerName , wait } from '../' ;
6
+ import { eventMap , NativeEvent } from '../events' ;
7
+
8
+ Object . keys ( eventMap ) . forEach ( key => {
9
+ const handlerName = getEventHandlerName ( key ) ;
10
+
11
+ describe ( `${ handlerName } ` , ( ) => {
12
+ const config = eventMap [ key ] ;
13
+
14
+ config . validTargets . forEach ( element => {
15
+ const handler = jest . fn ( ) ;
16
+ const { baseElement } = render ( React . createElement ( element , { [ handlerName ] : handler } ) ) ;
17
+
18
+ fireEvent [ key ] ( baseElement ) ;
19
+
20
+ expect ( handler ) . toHaveBeenCalledTimes ( 1 ) ;
21
+ } ) ;
22
+ } ) ;
23
+ } ) ;
6
24
7
25
test ( 'onChange works' , ( ) => {
8
26
const handleChange = jest . fn ( ) ;
@@ -26,6 +44,27 @@ test('onChangeText works', () => {
26
44
expect ( input . props . value ) . toBe ( 'second' ) ;
27
45
} ) ;
28
46
47
+ test ( 'assigns target properties' , async ( ) => {
48
+ class MyComponent extends React . Component {
49
+ state = { value : '' } ;
50
+ onChange = ( { nativeEvent } ) => {
51
+ this . setState ( { value : nativeEvent . text } ) ;
52
+ this . props . onChange ( ) ;
53
+ } ;
54
+ render ( ) {
55
+ return < TextInput testID = "input" value = { this . state . value } onChange = { this . onChange } /> ;
56
+ }
57
+ }
58
+
59
+ const spy = jest . fn ( ) ;
60
+ const value = 'a' ;
61
+ const { getByTestId } = render ( < MyComponent onChange = { spy } /> ) ;
62
+ const input = getByTestId ( 'input' ) ;
63
+ fireEvent . change ( input , { nativeEvent : { text : value } } ) ;
64
+ expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
65
+ await wait ( ( ) => expect ( input . props . value ) . toBe ( value ) ) ;
66
+ } ) ;
67
+
29
68
test ( 'calling `fireEvent` directly works too' , ( ) => {
30
69
const handleEvent = jest . fn ( ) ;
31
70
const { baseElement } = render ( < Button onPress = { handleEvent } title = "test" /> ) ;
0 commit comments