diff --git a/packages/runtime-core/__tests__/components/Teleport.spec.ts b/packages/runtime-core/__tests__/components/Teleport.spec.ts index 79125cd04..1cf83dd35 100644 --- a/packages/runtime-core/__tests__/components/Teleport.spec.ts +++ b/packages/runtime-core/__tests__/components/Teleport.spec.ts @@ -719,6 +719,36 @@ describe('renderer: teleport', () => { expect(root.innerHTML).toBe('') }) + test('skip unmount children if teleport not disabled & target missing', async () => { + const root = document.createElement('div') + const childShow = ref(true) + + const Comp = { + setup() { + return () => h(Teleport, { to: null }, [h('div', 'foo')]) + }, + } + + const App = defineComponent({ + setup() { + return () => { + return h(Fragment, { key: 0 }, [ + childShow.value ? h(Comp) : createCommentVNode('v-if'), + ]) + } + }, + }) + + domRender(h(App), root) + expect('Invalid Teleport target: null').toHaveBeenWarned() + expect('Invalid Teleport target on mount').toHaveBeenWarned() + expect(root.innerHTML).toBe('') + + childShow.value = false + await nextTick() + expect(root.innerHTML).toBe('') + }) + test('accessing template refs inside teleport', async () => { const target = nodeOps.createElement('div') const tRef = ref()