@@ -1116,4 +1116,132 @@ describe('Http', () => {
11161116
11171117 httpMiddleware ( next ) ( request , response )
11181118 } ) )
1119+
1120+ test ( 'should retry when request is aborted (success)' , ( ) => {
1121+ expect . assertions ( 1 )
1122+ return new Promise ( ( resolve , reject ) => {
1123+ const request = createTestRequest ( {
1124+ uri : '/foo/bar' ,
1125+ } )
1126+ const response = { resolve, reject }
1127+ const next = ( req , res ) => {
1128+ expect ( res ) . toEqual ( {
1129+ ...response ,
1130+ body : { foo : 'bar' } ,
1131+ statusCode : 200 ,
1132+ } )
1133+ resolve ( )
1134+ }
1135+ // Use default options
1136+ const httpMiddleware = createHttpMiddleware ( {
1137+ host : testHost ,
1138+ timeout : 100 ,
1139+ fetch,
1140+ enableRetry : true ,
1141+ retryConfig : {
1142+ retryOnAbort : true ,
1143+ } ,
1144+ getAbortController : ( ) => new AbortController ( ) ,
1145+ } )
1146+ nock ( testHost )
1147+ . defaultReplyHeaders ( {
1148+ 'Content-Type' : 'application/json' ,
1149+ } )
1150+ . get ( '/foo/bar' )
1151+ . once ( )
1152+ . delay ( 200 ) // delay response to fail
1153+ . reply ( 200 , { foo : 'bar' } )
1154+ . get ( '/foo/bar' )
1155+ . delay ( 50 ) // delay lower then timeout
1156+ . reply ( 200 , { foo : 'bar' } )
1157+
1158+ httpMiddleware ( next ) ( request , response )
1159+ } )
1160+ } )
1161+
1162+ test ( 'should retry when request is aborted (fail)' , ( ) => {
1163+ expect . assertions ( 1 )
1164+ return new Promise ( ( resolve , reject ) => {
1165+ const request = createTestRequest ( {
1166+ uri : '/foo/bar' ,
1167+ } )
1168+ const response = { resolve, reject }
1169+ const next = ( req , res ) => {
1170+ expect ( res ) . toEqual ( {
1171+ ...response ,
1172+ error : expect . any ( Error ) ,
1173+ statusCode : 0 ,
1174+ } )
1175+ resolve ( )
1176+ }
1177+ // Use default options
1178+ const httpMiddleware = createHttpMiddleware ( {
1179+ host : testHost ,
1180+ timeout : 100 ,
1181+ fetch,
1182+ enableRetry : true ,
1183+ retryConfig : {
1184+ maxRetries : 2 ,
1185+ retryOnAbort : false ,
1186+ } ,
1187+ getAbortController : ( ) => new AbortController ( ) ,
1188+ } )
1189+ nock ( testHost )
1190+ . defaultReplyHeaders ( {
1191+ 'Content-Type' : 'application/json' ,
1192+ } )
1193+ . get ( '/foo/bar' )
1194+ . once ( )
1195+ . delay ( 200 ) // delay response to fail
1196+ . reply ( 200 , { foo : 'bar' } )
1197+ . get ( '/foo/bar' )
1198+ . delay ( 150 ) // delay higher then timeout
1199+ . reply ( 200 , { foo : 'bar' } )
1200+
1201+ httpMiddleware ( next ) ( request , response )
1202+ } )
1203+ } )
1204+
1205+ test ( 'should retry when requests are aborted (fail)' , ( ) => {
1206+ expect . assertions ( 1 )
1207+ return new Promise ( ( resolve , reject ) => {
1208+ const request = createTestRequest ( {
1209+ uri : '/foo/bar' ,
1210+ } )
1211+ const response = { resolve, reject }
1212+ const next = ( req , res ) => {
1213+ expect ( res ) . toEqual ( {
1214+ ...response ,
1215+ error : expect . any ( Error ) ,
1216+ statusCode : 0 ,
1217+ } )
1218+ resolve ( )
1219+ }
1220+ // Use default options
1221+ const httpMiddleware = createHttpMiddleware ( {
1222+ host : testHost ,
1223+ timeout : 100 , // time out after 10ms
1224+ fetch,
1225+ enableRetry : true ,
1226+ retryConfig : {
1227+ maxRetries : 1 ,
1228+ retryOnAbort : true ,
1229+ } ,
1230+ getAbortController : ( ) => new AbortController ( ) ,
1231+ } )
1232+ nock ( testHost )
1233+ . defaultReplyHeaders ( {
1234+ 'Content-Type' : 'application/json' ,
1235+ } )
1236+ . get ( '/foo/bar' )
1237+ . once ( )
1238+ . delay ( 150 ) // delay response to fail (higher than timeout)
1239+ . reply ( 200 , { foo : 'bar' } )
1240+ . get ( '/foo/bar' )
1241+ . delay ( 150 ) // delay response to fail (higher than timeout)
1242+ . reply ( 200 , { foo : 'bar' } )
1243+
1244+ httpMiddleware ( next ) ( request , response )
1245+ } )
1246+ } )
11191247} )
0 commit comments