Skip to content

Commit d3b1238

Browse files
committed
add test
1 parent 7690700 commit d3b1238

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

tests/data-loaders/tester.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)