From 87d1e5f0281e389990042ecd76c9dd9470668bb9 Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 24 Jul 2025 16:34:12 +0800 Subject: [PATCH] test: add tests --- .../vue/__tests__/e2e/memory-leak.spec.ts | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/packages/vue/__tests__/e2e/memory-leak.spec.ts b/packages/vue/__tests__/e2e/memory-leak.spec.ts index 0ad9be687..bd53387dc 100644 --- a/packages/vue/__tests__/e2e/memory-leak.spec.ts +++ b/packages/vue/__tests__/e2e/memory-leak.spec.ts @@ -143,4 +143,85 @@ describe('not leaking', async () => { }, E2E_TIMEOUT, ) + + // https://github.com/element-plus/element-plus/issues/21408 + test( + 'cached text nodes in Fragment should not retaining detached DOM nodes', + async () => { + const client = await page().createCDPSession() + await page().evaluate(async () => { + const { createApp, ref } = (window as any).Vue + createApp({ + components: { + Comp: { + template: `
{{ test.length }}
`, + setup() { + const test = ref([...Array(3000)].map((_, i) => ({ i }))) + // @ts-expect-error + window.__REF__ = new WeakRef(test) + + return { test } + }, + }, + }, + template: ` + + +
+ + +
+ `, + setup() { + const toggle = ref(true) + const items = ref([1]) + const click = () => (toggle.value = !toggle.value) + const add = () => items.value.push(2) + return { toggle, click, items, add } + }, + }).mount('#app') + }) + + expect(await html('#app')).toBe( + `` + + `` + + `
` + + ` text ` + + `
1
` + + `
3000
`, + ) + + await click('#addBtn') + expect(await html('#app')).toBe( + `` + + `` + + `
` + + ` text ` + + `
1
` + + ` text ` + + `
2
` + + `
3000
`, + ) + + await click('#toggleBtn') + expect(await html('#app')).toBe( + `` + + ``, + ) + + const isCollected = async () => + // @ts-expect-error + await page().evaluate(() => window.__REF__.deref() === undefined) + + while ((await isCollected()) === false) { + await client.send('HeapProfiler.collectGarbage') + } + + expect(await isCollected()).toBe(true) + }, + E2E_TIMEOUT, + ) })