fix(runtime-core): handle error in async KeepAlive hooks (#4978)

This commit is contained in:
ygj6 2021-11-22 15:50:19 +08:00 committed by GitHub
parent 61720231b4
commit 820a143457
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 2 deletions

View File

@ -16,7 +16,9 @@ import {
cloneVNode,
provide,
defineAsyncComponent,
Component
Component,
createApp,
onActivated
} from '@vue/runtime-test'
import { KeepAliveProps } from '../../src/components/KeepAlive'
@ -874,4 +876,31 @@ describe('KeepAlive', () => {
await nextTick()
expect(serializeInner(root)).toBe('<p>1</p>')
})
// #4976
test('handle error in async onActivated', async () => {
const err = new Error('foo')
const handler = jest.fn()
const app = createApp({
setup() {
return () => h(KeepAlive, null, () => h(Child))
}
})
const Child = {
setup() {
onActivated(async () => {
throw err
})
},
render() {}
}
app.config.errorHandler = handler
app.mount(nodeOps.createElement('div'))
await nextTick()
expect(handler).toHaveBeenCalledWith(err, {}, 'activated hook')
})
})

View File

@ -381,7 +381,7 @@ function registerKeepAliveHook(
}
current = current.parent
}
hook()
return hook()
})
injectHook(type, wrappedHook, target)
// In addition to registering it on the target instance, we walk up the parent