diff --git a/src/__tests__/helpers.js b/src/__tests__/helpers.js index 9749a090..eb86a1d1 100644 --- a/src/__tests__/helpers.js +++ b/src/__tests__/helpers.js @@ -97,4 +97,23 @@ describe('run with real timers', () => { }) expect(global.setTimeout).toBe(fakedSetTimeout) }) + + describe('run with setImmediate and clearImmediate deleted', () => { + const setImmediate = global.setImmediate + const clearImmediate = global.clearImmediate + + beforeEach(() => { + delete global.setImmediate + delete global.clearImmediate + }) + + afterEach(() => { + global.setImmediate = setImmediate + global.clearImmediate = clearImmediate + }) + + test('safe check for setImmediate and clearImmediate', () => { + expect(() => runWithRealTimers(() => {})).not.toThrow() + }) + }) }) diff --git a/src/helpers.js b/src/helpers.js index 7634bf9d..559e39d2 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -16,14 +16,21 @@ function runWithRealTimers(callback) { function runWithJestRealTimers(callback) { const timerAPI = { - clearImmediate, clearInterval, clearTimeout, - setImmediate, setInterval, setTimeout, } + // For more on why we have the check here, + // checkout https://github.com/testing-library/dom-testing-library/issues/914 + if (typeof setImmediate === 'function') { + timerAPI.setImmediate = setImmediate + } + if (typeof clearImmediate === 'function') { + timerAPI.clearImmediate = clearImmediate + } + jest.useRealTimers() const callbackReturnValue = callback()