Skip to content

Commit

Permalink
fix(runtime-core): handle error in async KeepAlive hooks (#4978)
Browse files Browse the repository at this point in the history
  • Loading branch information
ygj6 committed Nov 22, 2021
1 parent 6172023 commit 820a143
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
31 changes: 30 additions & 1 deletion packages/runtime-core/__tests__/components/KeepAlive.spec.ts
Expand Up @@ -16,7 +16,9 @@ import {
cloneVNode,
provide,
defineAsyncComponent,
Component
Component,
createApp,
onActivated
} from '@vue/runtime-test'
import { KeepAliveProps } from '../../src/components/KeepAlive'

Expand Down Expand Up @@ -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')
})
})
2 changes: 1 addition & 1 deletion packages/runtime-core/src/components/KeepAlive.ts
Expand Up @@ -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
Expand Down

0 comments on commit 820a143

Please sign in to comment.