From e12fffcaaf441a1eeae26e7a18d86348f8d348d9 Mon Sep 17 00:00:00 2001 From: stivencabrera3 Date: Tue, 11 Feb 2025 20:42:34 -0500 Subject: [PATCH 1/3] fix: properly clean up multi-root components (#295) --- src/render.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/render.js b/src/render.js index 997ba4c..79ece98 100644 --- a/src/render.js +++ b/src/render.js @@ -34,7 +34,7 @@ Check out the test examples on GitHub for further details.`) // https://github.com/vuejs/vue-test-utils-next/blob/master/src/mount.ts#L309 unwrapNode(wrapper.parentElement) - mountedWrappers.add(wrapper) + mountedWrappers.add({wrapper, container}) return { container, @@ -59,9 +59,9 @@ function cleanup() { mountedWrappers.forEach(cleanupAtWrapper) } -function cleanupAtWrapper(wrapper) { - if (wrapper.element?.parentNode?.parentNode === document.body) { - document.body.removeChild(wrapper.element.parentNode) +function cleanupAtWrapper({wrapper, container}) { + if (container.parentNode === document.body) { + document.body.removeChild(container) } wrapper.unmount() From 12aa8ab1bef885781affd3576dcc4af198f09610 Mon Sep 17 00:00:00 2001 From: stivencabrera3 Date: Tue, 11 Feb 2025 20:43:06 -0500 Subject: [PATCH 2/3] test: add test coverage for multi-root and slot cleanup (#295) --- src/__tests__/auto-cleanup.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/__tests__/auto-cleanup.js b/src/__tests__/auto-cleanup.js index 1f899a4..8134688 100644 --- a/src/__tests__/auto-cleanup.js +++ b/src/__tests__/auto-cleanup.js @@ -16,3 +16,33 @@ test('renders the component', () => { test('cleans up after each test by default', () => { expect(document.body.innerHTML).toMatchInlineSnapshot(``) }) + +test('renders multi-root component', () => { + render({ + template: ` +

Hello World

+

Hello World

+ `, + }) + + expect(document.body.innerHTML).toMatchInlineSnapshot(` +
+

Hello World

+

Hello World

+
+ `) +}) + +test('cleans up after rendering multi-root node', () => { + expect(document.body.innerHTML).toMatchInlineSnapshot(``) +}) + +test('renders single slot component', () => { + render({template: ``}) + + expect(document.body.innerHTML).toMatchInlineSnapshot(`
`) +}) + +test('cleans up after rendering slot component', () => { + expect(document.body.innerHTML).toMatchInlineSnapshot(``) +}) From bd3fbdd5e929c47cb1269f6944bfcafe32a4ef31 Mon Sep 17 00:00:00 2001 From: stivencabrera3 Date: Tue, 11 Feb 2025 22:15:01 -0500 Subject: [PATCH 3/3] fix: correctly remove wrapper entries in cleanup --- src/render.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/render.js b/src/render.js index 79ece98..92b2f87 100644 --- a/src/render.js +++ b/src/render.js @@ -59,13 +59,15 @@ function cleanup() { mountedWrappers.forEach(cleanupAtWrapper) } -function cleanupAtWrapper({wrapper, container}) { +function cleanupAtWrapper(entry) { + const {wrapper, container} = entry + if (container.parentNode === document.body) { document.body.removeChild(container) } wrapper.unmount() - mountedWrappers.delete(wrapper) + mountedWrappers.delete(entry) } export {render, cleanup}