From a19d8f7fc90a09b075e9c92efbf768b809809983 Mon Sep 17 00:00:00 2001 From: edison Date: Mon, 17 Nov 2025 15:38:08 +0800 Subject: [PATCH] test(runtime-vapor): add test for teleport work with SVG (#14103) --- .../__tests__/components/Teleport.spec.ts | 38 ++++++++++++++++++- packages/runtime-vapor/src/apiTemplateRef.ts | 1 + 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/runtime-vapor/__tests__/components/Teleport.spec.ts b/packages/runtime-vapor/__tests__/components/Teleport.spec.ts index 5f3324e1e3..f6b47220e7 100644 --- a/packages/runtime-vapor/__tests__/components/Teleport.spec.ts +++ b/packages/runtime-vapor/__tests__/components/Teleport.spec.ts @@ -4,6 +4,7 @@ import { createComponent as createComp, createComponent, } from '../../src/component' +import { withVaporCtx } from '../../src' import { type VaporDirective, VaporTeleport, @@ -704,7 +705,42 @@ function runSharedTests(deferMode: boolean): void { expect(target.innerHTML).toBe('
teleported
') }) - test.todo('should work with SVG', async () => {}) + test('should work with SVG', async () => { + const svg = ref() + const circle = ref() + const { host } = define({ + setup() { + const _setTemplateRef = createTemplateRefSetter() + const n0 = template('', false, 1)() as any + const n1 = createIf( + () => svg.value, + () => { + const n4 = createComponent( + VaporTeleport, + { to: () => svg.value }, + { + default: withVaporCtx(() => { + const n3 = template('', false, 1)() as any + _setTemplateRef(n3, circle, undefined, undefined, 'circle') + return n3 + }), + }, + ) + return n4 + }, + ) + _setTemplateRef(n0, svg, undefined, undefined, 'svg') + return [n0, n1] + }, + }).render() + + await nextTick() + expect(host.innerHTML).toBe( + '', + ) + expect(svg.value.namespaceURI).toBe('http://www.w3.org/2000/svg') + expect(circle.value.namespaceURI).toBe('http://www.w3.org/2000/svg') + }) test('should update target', async () => { const targetA = document.createElement('div') diff --git a/packages/runtime-vapor/src/apiTemplateRef.ts b/packages/runtime-vapor/src/apiTemplateRef.ts index bbe60d829a..33784d6700 100644 --- a/packages/runtime-vapor/src/apiTemplateRef.ts +++ b/packages/runtime-vapor/src/apiTemplateRef.ts @@ -35,6 +35,7 @@ export type setRefFn = ( ref: NodeRef, oldRef?: NodeRef, refFor?: boolean, + refKey?: string, ) => NodeRef | undefined export function createTemplateRefSetter(): setRefFn { -- 2.47.3