From 240900c3d0bf72a94d3c0dfc85a5214ef3b16f63 Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Mon, 13 Jul 2020 12:15:28 -0600 Subject: [PATCH] fix(cleanup): remove scheduler code from flush-microtasks (#744) * test: reveal issue with the test generally * test: fix the test to actually test what we can test for * fix(cleanup): remove scheduler related code * chore: remove semver dep --- package.json | 3 +-- src/__tests__/cleanup.js | 4 ++-- src/flush-microtasks.js | 29 +---------------------------- 3 files changed, 4 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 0759692a..652c7d04 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,7 @@ "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.3", - "@testing-library/dom": "^7.17.1", - "semver": "^7.3.2" + "@testing-library/dom": "^7.17.1" }, "devDependencies": { "@testing-library/jest-dom": "^5.10.1", diff --git a/src/__tests__/cleanup.js b/src/__tests__/cleanup.js index f3f6a557..c0f1676d 100644 --- a/src/__tests__/cleanup.js +++ b/src/__tests__/cleanup.js @@ -27,11 +27,11 @@ test('cleanup does not error when an element is not a child', async () => { await cleanup() }) -test('cleanup waits for queued microtasks during unmount sequence', async () => { +test('cleanup runs effect cleanup functions', async () => { const spy = jest.fn() const Test = () => { - React.useEffect(() => () => setImmediate(spy)) + React.useEffect(() => spy) return null } diff --git a/src/flush-microtasks.js b/src/flush-microtasks.js index 3789bf80..e1d8fe6f 100644 --- a/src/flush-microtasks.js +++ b/src/flush-microtasks.js @@ -1,6 +1,3 @@ -import React from 'react' -import satisfies from 'semver/functions/satisfies' - /* 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 @@ -18,9 +15,6 @@ function getIsUsingFakeTimers() { ) } -const globalObj = typeof window === 'undefined' ? global : window -let Scheduler = globalObj.Scheduler - let didWarnAboutMessageChannel = false let enqueueTask @@ -32,8 +26,6 @@ try { // 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 - // import React's scheduler so we'll be able to schedule our tasks later on. - Scheduler = nodeRequire.call(module, 'scheduler') } catch (_err) { // we're in a browser // we can't use regular timers because they may still be faked @@ -55,28 +47,9 @@ try { 'if you encounter this warning.', ) } - } } -const isModernScheduleCallbackSupported = Scheduler && satisfies(React.version, '>16.8.6', { - includePrerelease: true, -}) - -function scheduleCallback(cb) { - const NormalPriority = Scheduler - ? Scheduler.NormalPriority || Scheduler.unstable_NormalPriority - : null - - const scheduleFn = Scheduler - ? Scheduler.scheduleCallback || Scheduler.unstable_scheduleCallback - : callback => callback() - - return isModernScheduleCallbackSupported - ? scheduleFn(NormalPriority, cb) - : scheduleFn(cb) -} - export default function flushMicroTasks() { return { then(resolve) { @@ -87,7 +60,7 @@ export default function flushMicroTasks() { jest.advanceTimersByTime(0) resolve() } else { - scheduleCallback(() => enqueueTask(resolve)) + enqueueTask(resolve) } }, }