@@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react'
2
2
import { render , fireEvent , act , screen } from '@testing-library/react'
3
3
import { mutate , useSWRConfig , SWRConfig } from 'swr'
4
4
import useSWRInfinite , { unstable_serialize } from 'swr/infinite'
5
- import { sleep , createKey , createResponse } from './utils'
5
+ import { sleep , createKey , createResponse , nextTick } from './utils'
6
6
7
7
describe ( 'useSWRInfinite' , ( ) => {
8
8
it ( 'should render the first page component' , async ( ) => {
@@ -693,11 +693,50 @@ describe('useSWRInfinite', () => {
693
693
694
694
await screen . findByText ( 'set size' )
695
695
fireEvent . click ( screen . getByText ( 'set size' ) )
696
- await act ( ( ) => sleep ( 1 ) )
696
+ await nextTick ( )
697
697
698
698
expect ( loggedValues ) . toEqual ( [ 1 ] )
699
699
} )
700
700
701
+ it ( 'should correctly set size when setSize receives a callback' , async ( ) => {
702
+ const key = createKey ( )
703
+
704
+ function Page ( ) {
705
+ const { data, size, setSize } = useSWRInfinite < string , string > (
706
+ index => `${ key } -${ index } ` ,
707
+ k => createResponse ( `page-${ k } ` )
708
+ )
709
+ return (
710
+ < div >
711
+ < p > data: { ( data || [ ] ) . join ( ) } </ p >
712
+ < p > size: { size } </ p >
713
+ < button onClick = { ( ) => setSize ( sz => sz + 1 ) } > set size</ button >
714
+ </ div >
715
+ )
716
+ }
717
+
718
+ const getDataBySize = size =>
719
+ Array < string > ( size )
720
+ . fill ( '' )
721
+ . map ( ( _ , index ) => `page-${ key } -${ index } ` )
722
+ . join ( )
723
+
724
+ render ( < Page /> )
725
+
726
+ await screen . findByText ( 'set size' )
727
+ const btn = screen . getByText ( 'set size' )
728
+
729
+ fireEvent . click ( btn )
730
+ await nextTick ( )
731
+ await screen . findByText ( `data: ${ getDataBySize ( 2 ) } ` )
732
+ await screen . findByText ( 'size: 2' )
733
+
734
+ fireEvent . click ( btn )
735
+ await nextTick ( )
736
+ await screen . findByText ( `data: ${ getDataBySize ( 3 ) } ` )
737
+ await screen . findByText ( 'size: 3' )
738
+ } )
739
+
701
740
// https://github.com/vercel/swr/issues/908
702
741
it ( 'should revalidate first page after mutating' , async ( ) => {
703
742
let renderedData
@@ -729,10 +768,10 @@ describe('useSWRInfinite', () => {
729
768
render ( < Page /> )
730
769
731
770
await screen . findByText ( 'mutate' )
732
- await act ( ( ) => sleep ( 1 ) )
771
+ await nextTick ( )
733
772
expect ( renderedData ) . toEqual ( [ 'old' ] )
734
773
fireEvent . click ( screen . getByText ( 'mutate' ) )
735
- await act ( ( ) => sleep ( 1 ) )
774
+ await nextTick ( )
736
775
expect ( renderedData ) . toEqual ( [ 'new' ] )
737
776
} )
738
777
0 commit comments