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