diff --git a/CHANGELOG.md b/CHANGELOG.md index d94812f6efad..2fc18fb8af4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -87,6 +87,8 @@ ([#5914](https://github.com/facebook/jest/pull/5914)) * `[jest-regex-util]` Fix handling regex symbols in tests path on Windows ([#5941](https://github.com/facebook/jest/pull/5941)) +* `[jest-util]` Fix handling of NaN/Infinity in mock timer delay + ([#5966](https://github.com/facebook/jest/pull/5966)) * `[jest-resolve]` Generalise test for package main entries equivalent to ".". ([#5968)](https://github.com/facebook/jest/pull/5968) diff --git a/packages/jest-util/src/__tests__/fake_timers.test.js b/packages/jest-util/src/__tests__/fake_timers.test.js index b59e0e00be3f..ac75ddf5ed01 100644 --- a/packages/jest-util/src/__tests__/fake_timers.test.js +++ b/packages/jest-util/src/__tests__/fake_timers.test.js @@ -315,17 +315,28 @@ describe('FakeTimers', () => { const mock2 = jest.fn(() => runOrder.push('mock2')); const mock3 = jest.fn(() => runOrder.push('mock3')); const mock4 = jest.fn(() => runOrder.push('mock4')); + const mock5 = jest.fn(() => runOrder.push('mock5')); + const mock6 = jest.fn(() => runOrder.push('mock6')); global.setTimeout(mock1, 100); - global.setTimeout(mock2, 0); + global.setTimeout(mock2, NaN); global.setTimeout(mock3, 0); const intervalHandler = global.setInterval(() => { mock4(); global.clearInterval(intervalHandler); }, 200); + global.setTimeout(mock5, Infinity); + global.setTimeout(mock6, -Infinity); timers.runAllTimers(); - expect(runOrder).toEqual(['mock2', 'mock3', 'mock1', 'mock4']); + expect(runOrder).toEqual([ + 'mock2', + 'mock3', + 'mock5', + 'mock6', + 'mock1', + 'mock4', + ]); }); it('warns when trying to advance timers while real timers are used', () => { diff --git a/packages/jest-util/src/fake_timers.js b/packages/jest-util/src/fake_timers.js index 0633a3fa0640..f0064e66f744 100644 --- a/packages/jest-util/src/fake_timers.js +++ b/packages/jest-util/src/fake_timers.js @@ -486,9 +486,7 @@ export default class FakeTimers { return null; } - if (delay == null) { - delay = 0; - } + delay = Number(delay) | 0; const args = []; for (let ii = 2, ll = arguments.length; ii < ll; ii++) {