11import React from 'react' ;
2+ import 'jest-native/extend-expect' ;
23import { Button , Image , Text , TextInput , TouchableHighlight } from 'react-native' ;
34
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+ } ) ;
624
725test ( 'onChange works' , ( ) => {
826 const handleChange = jest . fn ( ) ;
@@ -26,6 +44,27 @@ test('onChangeText works', () => {
2644 expect ( input . props . value ) . toBe ( 'second' ) ;
2745} ) ;
2846
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+
2968test ( 'calling `fireEvent` directly works too' , ( ) => {
3069 const handleEvent = jest . fn ( ) ;
3170 const { baseElement } = render ( < Button onPress = { handleEvent } title = "test" /> ) ;
0 commit comments