@@ -6832,4 +6832,130 @@ describe('useQuery', () => {
68326832    expect ( fetchCount ) . toBe ( initialFetchCount  +  1 ) 
68336833    expect ( queryFn ) . toHaveBeenCalledTimes ( 2 ) 
68346834  } ) 
6835+ 
6836+   it ( 'should not retry on mount when throwOnError function returns true' ,  async  ( )  =>  { 
6837+     const  key  =  queryKey ( ) 
6838+     let  fetchCount  =  0 
6839+     const  queryFn  =  vi . fn ( ) . mockImplementation ( ( )  =>  { 
6840+       fetchCount ++ 
6841+       console . log ( `Fetching... (attempt ${ fetchCount }  )` ) 
6842+       return  Promise . reject ( new  Error ( 'Simulated 500 error' ) ) 
6843+     } ) 
6844+ 
6845+     function  Component ( )  { 
6846+       const  {  status,  error }  =  useQuery ( { 
6847+         queryKey : key , 
6848+         queryFn, 
6849+         throwOnError : ( )  =>  true , 
6850+         retryOnMount : true , 
6851+         staleTime : Infinity , 
6852+         retry : false , 
6853+       } ) 
6854+ 
6855+       return  ( 
6856+         < div > 
6857+           < div  data-testid = "status" > { status } </ div > 
6858+           { error  &&  < div  data-testid = "error" > { error . message } </ div > } 
6859+         </ div > 
6860+       ) 
6861+     } 
6862+ 
6863+     const  {  unmount,  getByTestId }  =  renderWithClient ( 
6864+       queryClient , 
6865+       < ErrorBoundary 
6866+         fallbackRender = { ( {  error } )  =>  ( 
6867+           < div > 
6868+             < div  data-testid = "status" > error</ div > 
6869+             < div  data-testid = "error" > { error ?. message } </ div > 
6870+           </ div > 
6871+         ) } 
6872+       > 
6873+         < Component  /> 
6874+       </ ErrorBoundary > , 
6875+     ) 
6876+ 
6877+     await  vi . waitFor ( ( )  => 
6878+       expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) , 
6879+     ) 
6880+     expect ( getByTestId ( 'error' ) ) . toHaveTextContent ( 'Simulated 500 error' ) 
6881+     expect ( fetchCount ) . toBe ( 1 ) 
6882+ 
6883+     unmount ( ) 
6884+ 
6885+     const  initialFetchCount  =  fetchCount 
6886+ 
6887+     renderWithClient ( queryClient ,  
6888+       < ErrorBoundary 
6889+         fallbackRender = { ( {  error } )  =>  ( 
6890+           < div > 
6891+             < div  data-testid = "status" > error</ div > 
6892+             < div  data-testid = "error" > { error ?. message } </ div > 
6893+           </ div > 
6894+         ) } 
6895+       > 
6896+         < Component  /> 
6897+       </ ErrorBoundary > 
6898+     ) 
6899+ 
6900+     await  vi . waitFor ( ( )  => 
6901+       expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) , 
6902+     ) 
6903+ 
6904+     // Should not retry because throwOnError returns true 
6905+     expect ( fetchCount ) . toBe ( initialFetchCount ) 
6906+     expect ( queryFn ) . toHaveBeenCalledTimes ( 1 ) 
6907+   } ) 
6908+ 
6909+   it ( 'should handle throwOnError function based on actual error state' ,  async  ( )  =>  { 
6910+     const  key  =  queryKey ( ) 
6911+     let  fetchCount  =  0 
6912+     const  queryFn  =  vi . fn ( ) . mockImplementation ( ( )  =>  { 
6913+       fetchCount ++ 
6914+       console . log ( `Fetching... (attempt ${ fetchCount }  )` ) 
6915+       return  Promise . reject ( new  Error ( 'Simulated 500 error' ) ) 
6916+     } ) 
6917+ 
6918+     function  Component ( )  { 
6919+       const  {  status,  error }  =  useQuery ( { 
6920+         queryKey : key , 
6921+         queryFn, 
6922+         throwOnError : ( error )  =>  error . message . includes ( '404' ) , 
6923+         retryOnMount : true , 
6924+         staleTime : Infinity , 
6925+         retry : false , 
6926+       } ) 
6927+ 
6928+       return  ( 
6929+         < div > 
6930+           < div  data-testid = "status" > { status } </ div > 
6931+           { error  &&  < div  data-testid = "error" > { error . message } </ div > } 
6932+         </ div > 
6933+       ) 
6934+     } 
6935+ 
6936+     const  {  unmount,  getByTestId }  =  renderWithClient ( 
6937+       queryClient , 
6938+       < Component  /> , 
6939+     ) 
6940+ 
6941+     await  vi . waitFor ( ( )  => 
6942+       expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) , 
6943+     ) 
6944+     expect ( getByTestId ( 'error' ) ) . toHaveTextContent ( 'Simulated 500 error' ) 
6945+     expect ( fetchCount ) . toBe ( 1 ) 
6946+ 
6947+     unmount ( ) 
6948+ 
6949+     const  initialFetchCount  =  fetchCount 
6950+ 
6951+     renderWithClient ( queryClient ,  < Component  /> ) 
6952+ 
6953+     await  vi . waitFor ( ( )  => 
6954+       expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) , 
6955+     ) 
6956+ 
6957+     // Should retry because throwOnError returns false (500 error doesn't include '404') 
6958+     expect ( fetchCount ) . toBe ( initialFetchCount  +  1 ) 
6959+     expect ( queryFn ) . toHaveBeenCalledTimes ( 2 ) 
6960+   } ) 
68356961} ) 
0 commit comments