@@ -1103,6 +1103,69 @@ export function testDefineLoader<Context = void>(
11031103 expect ( wrapper . text ( ) ) . toBe ( 'ok,one ok' )
11041104 } )
11051105
1106+ it ( `nested loader correctly aborts top level loader` , async ( ) => {
1107+ const alwaysAbortsLoader = loaderFactory ( {
1108+ fn : async ( ) => {
1109+ console . log ( 'BBB' )
1110+ const controller = new AbortController ( )
1111+ controller . abort ( )
1112+ controller . signal . throwIfAborted ( )
1113+
1114+ return { result : 'unreachable' }
1115+ } ,
1116+ key : 'nested' ,
1117+ } )
1118+
1119+ console . log ( 'HUUUh' , alwaysAbortsLoader )
1120+
1121+ const rootLoader = loaderFactory ( {
1122+ fn : async ( ) => {
1123+ const data = await alwaysAbortsLoader ( )
1124+
1125+ // should not reach here
1126+ return ( data as { result : string } ) . result
1127+ } ,
1128+ key : 'root' ,
1129+ } )
1130+ const router = getRouter ( )
1131+ router . addRoute ( {
1132+ name : '_test' ,
1133+ path : '/fetch' ,
1134+ component : defineComponent ( {
1135+ setup ( ) {
1136+ const { data } = alwaysAbortsLoader ( )
1137+ const { data : root } = rootLoader ( )
1138+
1139+ return { root, data }
1140+ } ,
1141+ template : `<p>{{ root }</p>` ,
1142+ } ) ,
1143+ meta : {
1144+ loaders : [ rootLoader , alwaysAbortsLoader ] ,
1145+ } ,
1146+ } )
1147+ mount ( RouterViewMock , {
1148+ global : {
1149+ plugins : [
1150+ [ DataLoaderPlugin , { router } ] ,
1151+ ...( plugins ?.( customContext ! ) || [ ] ) ,
1152+ router ,
1153+ ] ,
1154+ } ,
1155+ } )
1156+
1157+ const l1 = mockedLoader ( { key : 'nested' } )
1158+
1159+ router . push ( '/fetch?p=one' )
1160+ await vi . runOnlyPendingTimersAsync ( )
1161+ l1 . resolve ( 'ok' )
1162+ await vi . runOnlyPendingTimersAsync ( )
1163+ // // should have navigated and called the nested loader once
1164+ // expect(l1.spy).toHaveBeenCalledTimes(1)
1165+ // expect(router.currentRoute.value.fullPath).toBe('/fetch?p=one')
1166+ // expect(wrapper.text()).toBe('ok,one ok')
1167+ } )
1168+
11061169 it ( 'keeps the old data until all loaders are resolved' , async ( ) => {
11071170 const router = getRouter ( )
11081171 const l1 = mockedLoader ( { commit : 'after-load' , key : 'l1' } )
0 commit comments