From 7d66386f7e1001e63b3145b798c9cf3a996312e7 Mon Sep 17 00:00:00 2001 From: Eduardo Rabelo Date: Sat, 4 May 2019 15:36:48 +1000 Subject: [PATCH 1/3] clean up document targets and components --- src/index.js | 8 ++++++-- tests/render.spec.js | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 450b82f..a9c8b00 100644 --- a/src/index.js +++ b/src/index.js @@ -10,7 +10,7 @@ export const render = (Component, {target = document.createElement('div'), ...op target, }) - mountedContainers.add(component) + mountedContainers.add({target, component}) return { component, // eslint-disable-next-line no-console @@ -20,7 +20,11 @@ export const render = (Component, {target = document.createElement('div'), ...op } const cleanupAtContainer = container => { - container.$destroy() + const {target, component} = container + component.$destroy() + if (target.parentNode === document.body) { + document.body.removeChild(target) + } mountedContainers.delete(container) } diff --git a/tests/render.spec.js b/tests/render.spec.js index 8f209be..023fc84 100644 --- a/tests/render.spec.js +++ b/tests/render.spec.js @@ -38,6 +38,8 @@ describe('render', () => { }) test('debug', () => { + const originalConsole = global.console + global.console = {log: jest.fn()} const {debug} = render(App) @@ -45,6 +47,8 @@ describe('render', () => { debug() expect(global.console.log).toHaveBeenCalledWith(prettyDOM(document.body)) + + global.console = originalConsole }) test('custom container target', () => { @@ -61,4 +65,8 @@ describe('render', () => { expect(getByText('Hello world!')).toBeInTheDocument() expect(getByTestId('custom-target')).toBeInTheDocument() }) + + test('after each test above, document is clean from targets and components', () => { + expect(document.body.innerHTML).toBe('
') + }) }) From 54fd79d6a59395d273fcc7a1d4091a5364e42e2b Mon Sep 17 00:00:00 2001 From: Eduardo Rabelo Date: Sun, 5 May 2019 08:25:17 +1000 Subject: [PATCH 2/3] jest cache was returning `
`, running with `--no-cache` fixed it --- tests/render.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/render.spec.js b/tests/render.spec.js index 023fc84..ed788b2 100644 --- a/tests/render.spec.js +++ b/tests/render.spec.js @@ -67,6 +67,6 @@ describe('render', () => { }) test('after each test above, document is clean from targets and components', () => { - expect(document.body.innerHTML).toBe('
') + expect(document.body.innerHTML).toBe('') }) }) From b48d507082cf376caa0c0da0bb7a561b2c99f628 Mon Sep 17 00:00:00 2001 From: Eduardo Rabelo Date: Sun, 5 May 2019 08:49:11 +1000 Subject: [PATCH 3/3] we can safely ignore `else` for code coverage here - https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignore-an-else-path --- src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.js b/src/index.js index a9c8b00..2258231 100644 --- a/src/index.js +++ b/src/index.js @@ -22,6 +22,7 @@ export const render = (Component, {target = document.createElement('div'), ...op const cleanupAtContainer = container => { const {target, component} = container component.$destroy() + /* istanbul ignore else */ if (target.parentNode === document.body) { document.body.removeChild(target) }