@@ -868,6 +868,89 @@ describe('fetchBaseQuery', () => {
868
868
expect ( request . headers [ 'delete' ] ) . toBe ( defaultHeaders [ 'delete' ] )
869
869
expect ( request . headers [ 'delete2' ] ) . toBe ( defaultHeaders [ 'delete2' ] )
870
870
} )
871
+
872
+ describe ( 'Accepts global arguments' , ( ) => {
873
+ test ( 'Global responseHandler' , async ( ) => {
874
+ server . use (
875
+ rest . get ( 'https://example.com/success' , ( _ , res , ctx ) =>
876
+ res . once ( ctx . text ( `this is not json!` ) )
877
+ )
878
+ )
879
+
880
+ const globalizedBaseQuery = fetchBaseQuery ( {
881
+ baseUrl,
882
+ fetchFn : fetchFn as any ,
883
+ responseHandler : 'text' ,
884
+ } )
885
+
886
+ const req = globalizedBaseQuery (
887
+ { url : '/success' , responseHandler : 'text' } ,
888
+ commonBaseQueryApi ,
889
+ { }
890
+ )
891
+ expect ( req ) . toBeInstanceOf ( Promise )
892
+ const res = await req
893
+ expect ( res ) . toBeInstanceOf ( Object )
894
+ expect ( res . meta ?. request ) . toBeInstanceOf ( Request )
895
+ expect ( res . meta ?. response ) . toBeInstanceOf ( Object )
896
+ expect ( res . data ) . toEqual ( `this is not json!` )
897
+ } )
898
+
899
+ test ( 'Global validateStatus' , async ( ) => {
900
+ const globalizedBaseQuery = fetchBaseQuery ( {
901
+ baseUrl,
902
+ fetchFn : fetchFn as any ,
903
+ validateStatus : ( response , body ) =>
904
+ response . status === 200 && body . success === false ? false : true ,
905
+ } )
906
+
907
+ // This is a scenario where an API may always return a 200, but indicates there is an error when success = false
908
+ const res = await globalizedBaseQuery (
909
+ {
910
+ url : '/nonstandard-error' ,
911
+ } ,
912
+ commonBaseQueryApi ,
913
+ { }
914
+ )
915
+
916
+ expect ( res . error ) . toEqual ( {
917
+ status : 200 ,
918
+ data : {
919
+ success : false ,
920
+ message : 'This returns a 200 but is really an error' ,
921
+ } ,
922
+ } )
923
+ } )
924
+
925
+ test ( 'Global timeout' , async ( ) => {
926
+ let reject : ( ) => void
927
+ const donePromise = new Promise ( ( resolve , _reject ) => {
928
+ reject = _reject
929
+ } )
930
+ server . use (
931
+ rest . get ( 'https://example.com/empty1' , async ( req , res , ctx ) => {
932
+ await Promise . race ( [ waitMs ( 3000 ) , donePromise ] )
933
+ return res . once ( ctx . json ( { ...req , headers : req . headers . all ( ) } ) )
934
+ } )
935
+ )
936
+ const globalizedBaseQuery = fetchBaseQuery ( {
937
+ baseUrl,
938
+ fetchFn : fetchFn as any ,
939
+ timeout : 200 ,
940
+ } )
941
+
942
+ const result = await globalizedBaseQuery (
943
+ { url : '/empty1' } ,
944
+ commonBaseQueryApi ,
945
+ { }
946
+ )
947
+ expect ( result ?. error ) . toEqual ( {
948
+ status : 'TIMEOUT_ERROR' ,
949
+ error : 'AbortError: The user aborted a request.' ,
950
+ } )
951
+ reject ! ( )
952
+ } )
953
+ } )
871
954
} )
872
955
873
956
describe ( 'fetchFn' , ( ) => {
@@ -950,28 +1033,27 @@ describe('still throws on completely unexpected errors', () => {
950
1033
} )
951
1034
952
1035
describe ( 'timeout' , ( ) => {
953
- it ( 'throws a timeout error when a request takes longer than specified timeout duration' , async ( ) => {
954
- jest . useFakeTimers ( 'legacy' )
955
- let result : any
1036
+ test ( 'throws a timeout error when a request takes longer than specified timeout duration' , async ( ) => {
1037
+ let reject : ( ) => void
1038
+ const donePromise = new Promise ( ( resolve , _reject ) => {
1039
+ reject = _reject
1040
+ } )
1041
+
956
1042
server . use (
957
- rest . get ( 'https://example.com/empty' , ( req , res , ctx ) =>
958
- res . once (
959
- ctx . delay ( 3000 ) ,
960
- ctx . json ( { ...req , headers : req . headers . all ( ) } )
961
- )
962
- )
1043
+ rest . get ( 'https://example.com/empty2' , async ( req , res , ctx ) => {
1044
+ await Promise . race ( [ waitMs ( 3000 ) , donePromise ] )
1045
+ return res . once ( ctx . json ( { ...req , headers : req . headers . all ( ) } ) )
1046
+ } )
1047
+ )
1048
+ const result = await baseQuery (
1049
+ { url : '/empty2' , timeout : 200 } ,
1050
+ commonBaseQueryApi ,
1051
+ { }
963
1052
)
964
- Promise . resolve (
965
- baseQuery ( { url : '/empty' , timeout : 2000 } , commonBaseQueryApi , { } )
966
- ) . then ( ( r ) => {
967
- result = r
968
- } )
969
- await waitMs ( )
970
- jest . runAllTimers ( )
971
- await waitMs ( )
972
1053
expect ( result ?. error ) . toEqual ( {
973
1054
status : 'TIMEOUT_ERROR' ,
974
1055
error : 'AbortError: The user aborted a request.' ,
975
1056
} )
1057
+ reject ! ( )
976
1058
} )
977
1059
} )
0 commit comments