@@ -747,6 +747,90 @@ describe('useInfiniteQuery', () => {
747747 } )
748748 } )
749749
750+ it ( 'should silently cancel an ongoing fetchNextPage request when another fetchNextPage is invoked' , async ( ) => {
751+ const key = queryKey ( )
752+ const start = 10
753+ const fetchPage = jest . fn ( async ( { pageParam = start } ) => {
754+ await sleep ( 50 )
755+ return Number ( pageParam )
756+ } )
757+
758+ function Page ( ) {
759+ const { fetchNextPage } = useInfiniteQuery ( key , fetchPage , {
760+ getNextPageParam : lastPage => lastPage + 1 ,
761+ } )
762+
763+ React . useEffect ( ( ) => {
764+ setActTimeout ( ( ) => {
765+ fetchNextPage ( )
766+ } , 100 )
767+ setActTimeout ( ( ) => {
768+ fetchNextPage ( )
769+ } , 110 )
770+ } , [ fetchNextPage ] )
771+
772+ return null
773+ }
774+
775+ renderWithClient ( queryClient , < Page /> )
776+
777+ await sleep ( 300 )
778+
779+ expect ( fetchPage ) . toBeCalledTimes ( 3 )
780+ expect ( fetchPage ) . toHaveBeenNthCalledWith ( 1 , {
781+ pageParam : undefined ,
782+ queryKey : [ key ] ,
783+ } )
784+ expect ( fetchPage ) . toHaveBeenNthCalledWith ( 2 , {
785+ pageParam : 11 ,
786+ queryKey : [ key ] ,
787+ } )
788+ expect ( fetchPage ) . toHaveBeenNthCalledWith ( 3 , {
789+ pageParam : 11 ,
790+ queryKey : [ key ] ,
791+ } )
792+ } )
793+
794+ it ( 'should not cancel an ongoing fetchNextPage request when another fetchNextPage is invoked if `cancelRefetch: false` is used ' , async ( ) => {
795+ const key = queryKey ( )
796+ const start = 10
797+ const fetchPage = jest . fn ( async ( { pageParam = start } ) => {
798+ await sleep ( 50 )
799+ return Number ( pageParam )
800+ } )
801+
802+ function Page ( ) {
803+ const { fetchNextPage } = useInfiniteQuery ( key , fetchPage , {
804+ getNextPageParam : lastPage => lastPage + 1 ,
805+ } )
806+
807+ React . useEffect ( ( ) => {
808+ setActTimeout ( ( ) => {
809+ fetchNextPage ( )
810+ } , 100 )
811+ setActTimeout ( ( ) => {
812+ fetchNextPage ( { cancelRefetch : false } )
813+ } , 110 )
814+ } , [ fetchNextPage ] )
815+
816+ return null
817+ }
818+
819+ renderWithClient ( queryClient , < Page /> )
820+
821+ await sleep ( 300 )
822+
823+ expect ( fetchPage ) . toBeCalledTimes ( 2 )
824+ expect ( fetchPage ) . toHaveBeenNthCalledWith ( 1 , {
825+ pageParam : undefined ,
826+ queryKey : [ key ] ,
827+ } )
828+ expect ( fetchPage ) . toHaveBeenNthCalledWith ( 2 , {
829+ pageParam : 11 ,
830+ queryKey : [ key ] ,
831+ } )
832+ } )
833+
750834 it ( 'should keep fetching first page when not loaded yet and triggering fetch more' , async ( ) => {
751835 const key = queryKey ( )
752836 const states : UseInfiniteQueryResult < number > [ ] = [ ]
0 commit comments