From c53b56b62302698c5c7b57a402b8b7ef1aa41c41 Mon Sep 17 00:00:00 2001 From: Michael Peyper Date: Tue, 8 Dec 2020 20:22:53 +1100 Subject: [PATCH] feat(cleanup): remove unnecessary flush microtasks as already handled by act (#511) --- src/cleanup.js | 3 --- src/flush-microtasks.js | 50 ----------------------------------------- 2 files changed, 53 deletions(-) delete mode 100644 src/flush-microtasks.js diff --git a/src/cleanup.js b/src/cleanup.js index 3699180a..d3172c46 100644 --- a/src/cleanup.js +++ b/src/cleanup.js @@ -1,9 +1,6 @@ -import flushMicroTasks from './flush-microtasks' - let cleanupCallbacks = [] async function cleanup() { - await flushMicroTasks() for (const callback of cleanupCallbacks) { await callback() } diff --git a/src/flush-microtasks.js b/src/flush-microtasks.js deleted file mode 100644 index 0869dfef..00000000 --- a/src/flush-microtasks.js +++ /dev/null @@ -1,50 +0,0 @@ -/* istanbul ignore file */ -// the part of this file that we need tested is definitely being run -// and the part that is not cannot easily have useful tests written -// anyway. So we're just going to ignore coverage for this file -/** - * copied from React's enqueueTask.js - * copied again from React Testing Library's flush-microtasks.js - */ - -let didWarnAboutMessageChannel = false -let enqueueTask -try { - // read require off the module object to get around the bundlers. - // we don't want them to detect a require and bundle a Node polyfill. - const requireString = `require${Math.random()}`.slice(0, 7) - const nodeRequire = module && module[requireString] - // assuming we're in node, let's try to get node's - // version of setImmediate, bypassing fake timers if any. - enqueueTask = nodeRequire.call(module, 'timers').setImmediate -} catch (_err) { - // we're in a browser - // we can't use regular timers because they may still be faked - // so we try MessageChannel+postMessage instead - enqueueTask = (callback) => { - const supportsMessageChannel = typeof MessageChannel === 'function' - if (supportsMessageChannel) { - const channel = new MessageChannel() - channel.port1.onmessage = callback - channel.port2.postMessage(undefined) - } else if (didWarnAboutMessageChannel === false) { - didWarnAboutMessageChannel = true - - // eslint-disable-next-line no-console - console.error( - 'This browser does not have a MessageChannel implementation, ' + - 'so enqueuing tasks via await act(async () => ...) will fail. ' + - 'Please file an issue at https://github.com/facebook/react/issues ' + - 'if you encounter this warning.' - ) - } - } -} - -export default function flushMicroTasks() { - return { - then(resolve) { - enqueueTask(resolve) - } - } -}