@@ -17,6 +17,8 @@ import { fireEvent, render, screen } from '..';
1717import { nativeState } from '../native-state' ;
1818
1919const layoutEvent = { nativeEvent : { layout : { width : 100 , height : 100 } } } ;
20+ const verticalScrollEvent = { nativeEvent : { contentOffset : { y : 200 } } } ;
21+ const scrollEvent = { nativeEvent : { contentOffset : { x : 100 , y : 200 } } } ;
2022const pressEventData = { nativeEvent : { pageX : 20 , pageY : 30 } } ;
2123
2224test ( 'fireEvent accepts event name with or without "on" prefix' , async ( ) => {
@@ -103,9 +105,6 @@ describe('fireEvent.changeText', () => {
103105} ) ;
104106
105107describe ( 'fireEvent.scroll' , ( ) => {
106- const scrollEventWithY = { nativeEvent : { contentOffset : { y : 200 } } } ;
107- const scrollEventWithXY = { nativeEvent : { contentOffset : { x : 50 , y : 100 } } } ;
108-
109108 test ( 'works on ScrollView' , async ( ) => {
110109 const onScroll = jest . fn ( ) ;
111110 await render (
@@ -114,48 +113,25 @@ describe('fireEvent.scroll', () => {
114113 </ ScrollView > ,
115114 ) ;
116115 const scrollView = screen . getByTestId ( 'scroll' ) ;
117- await fireEvent . scroll ( scrollView , scrollEventWithY ) ;
118- expect ( onScroll ) . toHaveBeenCalledWith ( scrollEventWithY ) ;
116+ await fireEvent . scroll ( scrollView , verticalScrollEvent ) ;
117+ expect ( onScroll ) . toHaveBeenCalledWith ( verticalScrollEvent ) ;
119118 expect ( nativeState . contentOffsetForElement . get ( scrollView ) ) . toEqual ( { x : 0 , y : 200 } ) ;
120119 } ) ;
121120
122- test ( 'fires onScrollBeginDrag' , async ( ) => {
123- const onScrollBeginDrag = jest . fn ( ) ;
124- await render ( < ScrollView testID = "scroll" onScrollBeginDrag = { onScrollBeginDrag } /> ) ;
125- const scrollView = screen . getByTestId ( 'scroll' ) ;
126- await fireEvent ( scrollView , 'scrollBeginDrag' , scrollEventWithXY ) ;
127- expect ( onScrollBeginDrag ) . toHaveBeenCalledWith ( scrollEventWithXY ) ;
128- expect ( nativeState . contentOffsetForElement . get ( scrollView ) ) . toEqual ( { x : 50 , y : 100 } ) ;
129- } ) ;
130-
131- test ( 'fires onScrollEndDrag' , async ( ) => {
132- const onScrollEndDrag = jest . fn ( ) ;
133- const eventData = { nativeEvent : { contentOffset : { x : 75 , y : 150 } } } ;
134- await render ( < ScrollView testID = "scroll" onScrollEndDrag = { onScrollEndDrag } /> ) ;
135- const scrollView = screen . getByTestId ( 'scroll' ) ;
136- await fireEvent ( scrollView , 'scrollEndDrag' , eventData ) ;
137- expect ( onScrollEndDrag ) . toHaveBeenCalledWith ( eventData ) ;
138- expect ( nativeState . contentOffsetForElement . get ( scrollView ) ) . toEqual ( { x : 75 , y : 150 } ) ;
139- } ) ;
140-
141- test ( 'fires onMomentumScrollBegin' , async ( ) => {
142- const onMomentumScrollBegin = jest . fn ( ) ;
143- const eventData = { nativeEvent : { contentOffset : { x : 120 , y : 250 } } } ;
144- await render ( < ScrollView testID = "scroll" onMomentumScrollBegin = { onMomentumScrollBegin } /> ) ;
145- const scrollView = screen . getByTestId ( 'scroll' ) ;
146- await fireEvent ( scrollView , 'momentumScrollBegin' , eventData ) ;
147- expect ( onMomentumScrollBegin ) . toHaveBeenCalledWith ( eventData ) ;
148- expect ( nativeState . contentOffsetForElement . get ( scrollView ) ) . toEqual ( { x : 120 , y : 250 } ) ;
149- } ) ;
150-
151- test ( 'fires onMomentumScrollEnd' , async ( ) => {
152- const onMomentumScrollEnd = jest . fn ( ) ;
153- const eventData = { nativeEvent : { contentOffset : { x : 200 , y : 400 } } } ;
154- await render ( < ScrollView testID = "scroll" onMomentumScrollEnd = { onMomentumScrollEnd } /> ) ;
121+ test . each ( [
122+ [ 'onScrollBeginDrag' , 'scrollBeginDrag' ] ,
123+ [ 'onScrollEndDrag' , 'scrollEndDrag' ] ,
124+ [ 'onMomentumScrollBegin' , 'momentumScrollBegin' ] ,
125+ [ 'onMomentumScrollEnd' , 'momentumScrollEnd' ] ,
126+ ] ) ( 'fires %s' , async ( propName , eventName ) => {
127+ const handler = jest . fn ( ) ;
128+ await render ( < ScrollView testID = "scroll" { ...{ [ propName ] : handler } } /> ) ;
155129 const scrollView = screen . getByTestId ( 'scroll' ) ;
156- await fireEvent ( scrollView , 'momentumScrollEnd' , eventData ) ;
157- expect ( onMomentumScrollEnd ) . toHaveBeenCalledWith ( eventData ) ;
158- expect ( nativeState . contentOffsetForElement . get ( scrollView ) ) . toEqual ( { x : 200 , y : 400 } ) ;
130+ await fireEvent ( scrollView , eventName , scrollEvent ) ;
131+ expect ( handler ) . toHaveBeenCalledWith ( scrollEvent ) ;
132+ expect ( nativeState . contentOffsetForElement . get ( scrollView ) ) . toEqual (
133+ scrollEvent . nativeEvent . contentOffset ,
134+ ) ;
159135 } ) ;
160136
161137 test ( 'without contentOffset does not update native state' , async ( ) => {
0 commit comments