@@ -6926,4 +6926,130 @@ describe('useQuery', () => {
6926
6926
expect ( fetchCount ) . toBe ( initialFetchCount + 1 )
6927
6927
expect ( queryFn ) . toHaveBeenCalledTimes ( 2 )
6928
6928
} )
6929
+
6930
+ it ( 'should not retry on mount when throwOnError function returns true' , async ( ) => {
6931
+ const key = queryKey ( )
6932
+ let fetchCount = 0
6933
+ const queryFn = vi . fn ( ) . mockImplementation ( ( ) => {
6934
+ fetchCount ++
6935
+ console . log ( `Fetching... (attempt ${ fetchCount } )` )
6936
+ return Promise . reject ( new Error ( 'Simulated 500 error' ) )
6937
+ } )
6938
+
6939
+ function Component ( ) {
6940
+ const { status, error } = useQuery ( {
6941
+ queryKey : key ,
6942
+ queryFn,
6943
+ throwOnError : ( ) => true ,
6944
+ retryOnMount : true ,
6945
+ staleTime : Infinity ,
6946
+ retry : false ,
6947
+ } )
6948
+
6949
+ return (
6950
+ < div >
6951
+ < div data-testid = "status" > { status } </ div >
6952
+ { error && < div data-testid = "error" > { error . message } </ div > }
6953
+ </ div >
6954
+ )
6955
+ }
6956
+
6957
+ const { unmount, getByTestId } = renderWithClient (
6958
+ queryClient ,
6959
+ < ErrorBoundary
6960
+ fallbackRender = { ( { error } ) => (
6961
+ < div >
6962
+ < div data-testid = "status" > error</ div >
6963
+ < div data-testid = "error" > { error ?. message } </ div >
6964
+ </ div >
6965
+ ) }
6966
+ >
6967
+ < Component />
6968
+ </ ErrorBoundary > ,
6969
+ )
6970
+
6971
+ await vi . waitFor ( ( ) =>
6972
+ expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) ,
6973
+ )
6974
+ expect ( getByTestId ( 'error' ) ) . toHaveTextContent ( 'Simulated 500 error' )
6975
+ expect ( fetchCount ) . toBe ( 1 )
6976
+
6977
+ unmount ( )
6978
+
6979
+ const initialFetchCount = fetchCount
6980
+
6981
+ renderWithClient ( queryClient ,
6982
+ < ErrorBoundary
6983
+ fallbackRender = { ( { error } ) => (
6984
+ < div >
6985
+ < div data-testid = "status" > error</ div >
6986
+ < div data-testid = "error" > { error ?. message } </ div >
6987
+ </ div >
6988
+ ) }
6989
+ >
6990
+ < Component />
6991
+ </ ErrorBoundary >
6992
+ )
6993
+
6994
+ await vi . waitFor ( ( ) =>
6995
+ expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) ,
6996
+ )
6997
+
6998
+ // Should not retry because throwOnError returns true
6999
+ expect ( fetchCount ) . toBe ( initialFetchCount )
7000
+ expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
7001
+ } )
7002
+
7003
+ it ( 'should handle throwOnError function based on actual error state' , async ( ) => {
7004
+ const key = queryKey ( )
7005
+ let fetchCount = 0
7006
+ const queryFn = vi . fn ( ) . mockImplementation ( ( ) => {
7007
+ fetchCount ++
7008
+ console . log ( `Fetching... (attempt ${ fetchCount } )` )
7009
+ return Promise . reject ( new Error ( 'Simulated 500 error' ) )
7010
+ } )
7011
+
7012
+ function Component ( ) {
7013
+ const { status, error } = useQuery ( {
7014
+ queryKey : key ,
7015
+ queryFn,
7016
+ throwOnError : ( error ) => error . message . includes ( '404' ) ,
7017
+ retryOnMount : true ,
7018
+ staleTime : Infinity ,
7019
+ retry : false ,
7020
+ } )
7021
+
7022
+ return (
7023
+ < div >
7024
+ < div data-testid = "status" > { status } </ div >
7025
+ { error && < div data-testid = "error" > { error . message } </ div > }
7026
+ </ div >
7027
+ )
7028
+ }
7029
+
7030
+ const { unmount, getByTestId } = renderWithClient (
7031
+ queryClient ,
7032
+ < Component /> ,
7033
+ )
7034
+
7035
+ await vi . waitFor ( ( ) =>
7036
+ expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) ,
7037
+ )
7038
+ expect ( getByTestId ( 'error' ) ) . toHaveTextContent ( 'Simulated 500 error' )
7039
+ expect ( fetchCount ) . toBe ( 1 )
7040
+
7041
+ unmount ( )
7042
+
7043
+ const initialFetchCount = fetchCount
7044
+
7045
+ renderWithClient ( queryClient , < Component /> )
7046
+
7047
+ await vi . waitFor ( ( ) =>
7048
+ expect ( getByTestId ( 'status' ) ) . toHaveTextContent ( 'error' ) ,
7049
+ )
7050
+
7051
+ // Should retry because throwOnError returns false (500 error doesn't include '404')
7052
+ expect ( fetchCount ) . toBe ( initialFetchCount + 1 )
7053
+ expect ( queryFn ) . toHaveBeenCalledTimes ( 2 )
7054
+ } )
6929
7055
} )
0 commit comments