From 1a77334c8e580be7393c6be13c99aea1aee1012b Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 27 Oct 2018 21:04:58 +0200 Subject: [PATCH 1/2] chore: don't rely on jest fake timers scheduling real timers --- .../ReactDOMSuspensePlaceholder-test.internal.js | 5 ++--- .../ReactSuspenseWithNoopRenderer-test.internal.js | 5 ++--- .../src/__tests__/ReactProfiler-test.internal.js | 5 ++--- .../src/__tests__/ReactProfilerDOM-test.internal.js | 11 +---------- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMSuspensePlaceholder-test.internal.js b/packages/react-dom/src/__tests__/ReactDOMSuspensePlaceholder-test.internal.js index 3fc258e365b..5c352637897 100644 --- a/packages/react-dom/src/__tests__/ReactDOMSuspensePlaceholder-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactDOMSuspensePlaceholder-test.internal.js @@ -43,9 +43,8 @@ describe('ReactDOMSuspensePlaceholder', () => { } jest.advanceTimersByTime(ms); // Wait until the end of the current tick - return new Promise(resolve => { - setImmediate(resolve); - }); + // We cannot use a timer since we're faking them + return Promise.resolve().then(() => {}); } function Text(props) { diff --git a/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js index ad5c089c8c5..4a15ee29051 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js @@ -62,9 +62,8 @@ describe('ReactSuspenseWithNoopRenderer', () => { } jest.advanceTimersByTime(ms); // Wait until the end of the current tick - return new Promise(resolve => { - setImmediate(resolve); - }); + // We cannot use a timer since we're faking them + return Promise.resolve().then(() => {}); } function Text(props) { diff --git a/packages/react/src/__tests__/ReactProfiler-test.internal.js b/packages/react/src/__tests__/ReactProfiler-test.internal.js index b1593ff31c1..18b42dde793 100644 --- a/packages/react/src/__tests__/ReactProfiler-test.internal.js +++ b/packages/react/src/__tests__/ReactProfiler-test.internal.js @@ -2194,9 +2194,8 @@ describe('Profiler', () => { function awaitableAdvanceTimers(ms) { jest.advanceTimersByTime(ms); // Wait until the end of the current tick - return new Promise(resolve => { - setImmediate(resolve); - }); + // We cannot use a timer since we're faking them + return Promise.resolve().then(() => {}); } it('traces both the temporary placeholder and the finished render for an interaction', async () => { diff --git a/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js b/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js index 75253600066..d10842f91f4 100644 --- a/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js +++ b/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js @@ -18,15 +18,6 @@ let ReactCache; function initEnvForAsyncTesting() { // Boilerplate copied from ReactDOMRoot-test // TODO pull this into helper method, reduce repetition. - const originalDateNow = Date.now; - global.Date.now = function() { - return originalDateNow(); - }; - global.requestAnimationFrame = function(cb) { - return setTimeout(() => { - cb(Date.now()); - }); - }; const originalAddEventListener = global.addEventListener; let postMessageCallback; global.addEventListener = function(eventName, callback, useCapture) { @@ -140,7 +131,7 @@ describe('ProfilerDOM', () => { // Evaluate in an unwrapped callback, // Because trace/wrap won't decrement the count within the wrapped callback. - setImmediate(() => { + Promise.resolve().then(() => { expect(onInteractionTraced).toHaveBeenCalledTimes(1); expect( onInteractionScheduledWorkCompleted, From 5029cba182ad4663bce61e0e7a8a8920dd7b4dcc Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 27 Oct 2018 21:09:45 +0200 Subject: [PATCH 2/2] re-add one part not working with Jest 23 --- .../react/src/__tests__/ReactProfilerDOM-test.internal.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js b/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js index d10842f91f4..354ccf25b8b 100644 --- a/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js +++ b/packages/react/src/__tests__/ReactProfilerDOM-test.internal.js @@ -18,6 +18,12 @@ let ReactCache; function initEnvForAsyncTesting() { // Boilerplate copied from ReactDOMRoot-test // TODO pull this into helper method, reduce repetition. + // TODO remove `requestAnimationFrame` when upgrading to Jest 24 with Lolex + global.requestAnimationFrame = function(cb) { + return setTimeout(() => { + cb(Date.now()); + }); + }; const originalAddEventListener = global.addEventListener; let postMessageCallback; global.addEventListener = function(eventName, callback, useCapture) {