diff --git a/src/core/vdom/helpers/resolve-async-component.js b/src/core/vdom/helpers/resolve-async-component.js index 43279b708ce..fa76090553c 100644 --- a/src/core/vdom/helpers/resolve-async-component.js +++ b/src/core/vdom/helpers/resolve-async-component.js @@ -65,8 +65,8 @@ export function resolveAsyncComponent ( if (!isDef(factory.owners)) { const owners = factory.owners = [owner] let sync = true - - if (owner) owner.$on('hook:destroyed', () => remove(owners, owner)) + + ;(owner: any).$on('hook:destroyed', () => remove(owners, owner)) const forceRender = (renderCompleted: boolean) => { for (let i = 0, l = owners.length; i < l; i++) { diff --git a/test/unit/modules/vdom/create-component.spec.js b/test/unit/modules/vdom/create-component.spec.js index 9ca34f68280..37f8226545b 100644 --- a/test/unit/modules/vdom/create-component.spec.js +++ b/test/unit/modules/vdom/create-component.spec.js @@ -93,7 +93,9 @@ describe('create-component', () => { props: ['msg'] }) } + setCurrentRenderingInstance(vm) const vnode = createComponent(async, data, vm, vm) + setCurrentRenderingInstance(null) expect(vnode.asyncFactory).toBe(async) expect(vnode.asyncFactory.owners.length).toEqual(0) expect(vnode.tag).toMatch(/vue-component-[0-9]+-child/) @@ -121,11 +123,15 @@ describe('create-component', () => { }, 0) } function go () { + setCurrentRenderingInstance(vm) vnode = createComponent(async, data, vm, vm) + setCurrentRenderingInstance(null) expect(vnode.isComment).toBe(true) // not to be loaded yet. } function failed () { + setCurrentRenderingInstance(vm) vnode = createComponent(async, data, vm, vm) + setCurrentRenderingInstance(null) expect(vnode.isComment).toBe(true) // failed, still a comment node expect(`Failed to resolve async component: ${async}\nReason: ${reason}`).toHaveBeenWarned() done()