@@ -873,20 +873,35 @@ describe('useQuery', () => {
873873
874874 states . push ( state )
875875
876- const { remove } = state
877-
878- React . useEffect ( ( ) => {
879- setActTimeout ( ( ) => {
880- remove ( )
881- rerender ( { } )
882- } , 20 )
883- } , [ remove ] )
876+ return (
877+ < >
878+ < div > { state . data } </ div >
884879
885- return null
880+ < button
881+ onClick = { ( ) => {
882+ state . remove ( )
883+ rerender ( { } )
884+ } }
885+ >
886+ remove
887+ </ button >
888+ </ >
889+ )
886890 }
887891
888- renderWithClient ( queryClient , < Page /> )
892+ const rendered = renderWithClient ( queryClient , < Page /> )
893+
894+ await waitFor ( ( ) => {
895+ rendered . getByText ( 'data' )
896+ } )
889897
898+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'remove' } ) )
899+
900+ await waitFor ( ( ) => {
901+ rendered . getByText ( 'data' )
902+ } )
903+
904+ // required to make sure no additional renders are happening after data is successfully fetched for the second time
890905 await sleep ( 100 )
891906
892907 expect ( states . length ) . toBe ( 5 )
@@ -1518,17 +1533,27 @@ describe('useQuery', () => {
15181533
15191534 states . push ( state )
15201535
1521- React . useEffect ( ( ) => {
1522- setActTimeout ( ( ) => {
1523- setCount ( 1 )
1524- } , 10 )
1525- } , [ ] )
1526-
1527- return null
1536+ return (
1537+ < div >
1538+ < button onClick = { ( ) => setCount ( 1 ) } > increment </ button >
1539+ < div > data: { state . data ?? 'undefined' } </ div >
1540+ < div > count: { count } </ div >
1541+ </ div >
1542+ )
15281543 }
15291544
1530- renderWithClient ( queryClient , < Page /> )
1545+ const rendered = renderWithClient ( queryClient , < Page /> )
1546+
1547+ await waitFor ( ( ) => rendered . getByText ( 'data: 0' ) )
15311548
1549+ fireEvent . click ( rendered . getByRole ( 'button' , { name : / i n c r e m e n t / i } ) )
1550+
1551+ await waitFor ( ( ) => {
1552+ rendered . getByText ( 'count: 1' )
1553+ rendered . getByText ( 'data: undefined' )
1554+ } )
1555+
1556+ // making sure no additional fetches are triggered
15321557 await sleep ( 50 )
15331558
15341559 expect ( states . length ) . toBe ( 3 )
@@ -1812,26 +1837,41 @@ describe('useQuery', () => {
18121837
18131838 states . push ( state )
18141839
1815- const { refetch } = state
1840+ return (
1841+ < div >
1842+ < button onClick = { ( ) => state . refetch ( ) } > refetch</ button >
1843+ < button onClick = { ( ) => setCount ( 1 ) } > setCount</ button >
1844+ < div > data: { state . data ?? 'undefined' } </ div >
1845+ </ div >
1846+ )
1847+ }
18161848
1817- React . useEffect ( ( ) => {
1818- refetch ( )
1849+ const rendered = renderWithClient ( queryClient , < Page /> )
18191850
1820- setActTimeout ( ( ) => {
1821- setCount ( 1 )
1822- } , 20 )
1851+ await waitFor ( ( ) => {
1852+ rendered . getByText ( 'data: undefined' )
1853+ } )
18231854
1824- setActTimeout ( ( ) => {
1825- refetch ( )
1826- } , 30 )
1827- } , [ refetch ] )
1855+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'refetch' } ) )
18281856
1829- return null
1830- }
1857+ await waitFor ( ( ) => {
1858+ rendered . getByText ( 'data: 0' )
1859+ } )
18311860
1832- renderWithClient ( queryClient , < Page /> )
1861+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'setCount' } ) )
18331862
1834- await sleep ( 100 )
1863+ await waitFor ( ( ) => {
1864+ rendered . getByText ( 'data: 0' )
1865+ } )
1866+
1867+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'refetch' } ) )
1868+
1869+ await waitFor ( ( ) => {
1870+ rendered . getByText ( 'data: 1' )
1871+ } )
1872+
1873+ // making sure no additional renders are triggered
1874+ await sleep ( 20 )
18351875
18361876 expect ( states . length ) . toBe ( 6 )
18371877
@@ -2194,19 +2234,31 @@ describe('useQuery', () => {
21942234
21952235 states . push ( state )
21962236
2197- const { refetch } = state
2237+ return (
2238+ < >
2239+ < button
2240+ onClick = { async ( ) => {
2241+ await state . refetch ( )
2242+ } }
2243+ >
2244+ refetch
2245+ </ button >
21982246
2199- React . useEffect ( ( ) => {
2200- setActTimeout ( ( ) => {
2201- refetch ( )
2202- } , 10 )
2203- } , [ refetch ] )
2204- return null
2247+ < div > { state . data } </ div >
2248+ </ >
2249+ )
22052250 }
22062251
2207- renderWithClient ( queryClient , < Page /> )
2252+ const rendered = renderWithClient ( queryClient , < Page /> )
22082253
2209- await sleep ( 30 )
2254+ await waitFor ( ( ) => {
2255+ rendered . getByText ( 'test' )
2256+ } )
2257+
2258+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'refetch' } ) )
2259+
2260+ // sleep is required to make sure no additional renders happen after click
2261+ await sleep ( 20 )
22102262
22112263 expect ( states . length ) . toBe ( 2 )
22122264 expect ( states [ 0 ] ) . toMatchObject ( {
0 commit comments