From c9f9ebbaeecff6a299454a3296285450d9d3609b Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Tue, 7 Apr 2020 14:05:14 -0500 Subject: [PATCH 1/2] Add test for microtask queue during unmount --- src/__tests__/cleanup.js | 14 ++++++++++++++ src/pure.js | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/__tests__/cleanup.js b/src/__tests__/cleanup.js index a870a42d..13107edb 100644 --- a/src/__tests__/cleanup.js +++ b/src/__tests__/cleanup.js @@ -26,3 +26,17 @@ test('cleanup does not error when an element is not a child', async () => { render(
, {container: document.createElement('div')}) await cleanup() }) + +test('cleanup waits for queued microtasks during unmount sequence', async () => { + const spy = jest.fn() + + const Test = () => { + React.useEffect(() => () => setImmediate(spy)) + + return null + } + + render() + await cleanup() + expect(spy).toHaveBeenCalledTimes(1) +}) diff --git a/src/pure.js b/src/pure.js index 9060c941..ecc456d0 100644 --- a/src/pure.js +++ b/src/pure.js @@ -90,8 +90,8 @@ function render( } async function cleanup() { - await flush() mountedContainers.forEach(cleanupAtContainer) + await flush() } // maybe one day we'll expose this (perhaps even as a utility returned by render). From 5048091a6ba8bcc66a2a425d8f37afe0925ae396 Mon Sep 17 00:00:00 2001 From: Kamran Ayub Date: Wed, 8 Apr 2020 09:21:55 -0500 Subject: [PATCH 2/2] Add comment to trigger status check --- src/pure.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pure.js b/src/pure.js index ecc456d0..4da3be98 100644 --- a/src/pure.js +++ b/src/pure.js @@ -91,6 +91,8 @@ function render( async function cleanup() { mountedContainers.forEach(cleanupAtContainer) + // flush microtask queue after unmounting in case + // unmount sequence generates new microtasks await flush() }