From 955b9e2dc309a613af1249452e7087c433ff2f48 Mon Sep 17 00:00:00 2001 From: minijus <3633549+minijus@users.noreply.github.com> Date: Sun, 10 Oct 2021 12:44:21 +0300 Subject: [PATCH] fix: use typeof assertion instead of instanceof to differentiate ModernFakeTimers and LegacyFakeTimers methods Closes #11660 #11767 #11662 --- packages/jest-runtime/src/index.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index ffe5bc4a64aa..4c308010b30d 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -30,7 +30,7 @@ import type { Module, ModuleWrapper, } from '@jest/environment'; -import {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers'; +import type {LegacyFakeTimers, ModernFakeTimers} from '@jest/fake-timers'; import type * as JestGlobals from '@jest/globals'; import type {SourceMapRegistry} from '@jest/source-map'; import type {RuntimeTransformResult, V8CoverageResult} from '@jest/test-result'; @@ -1961,8 +1961,11 @@ export default class Runtime { getRealSystemTime: () => { const fakeTimers = _getFakeTimers(); - if (fakeTimers instanceof ModernFakeTimers) { - return fakeTimers.getRealSystemTime(); + if ( + typeof (fakeTimers as ModernFakeTimers).getRealSystemTime === + 'function' + ) { + return (fakeTimers as ModernFakeTimers).getRealSystemTime(); } else { throw new TypeError( 'getRealSystemTime is not available when not using modern timers', @@ -1982,8 +1985,11 @@ export default class Runtime { runAllImmediates: () => { const fakeTimers = _getFakeTimers(); - if (fakeTimers instanceof LegacyFakeTimers) { - fakeTimers.runAllImmediates(); + if ( + typeof (fakeTimers as LegacyFakeTimers).runAllImmediates === + 'function' + ) { + (fakeTimers as LegacyFakeTimers).runAllImmediates(); } else { throw new TypeError( 'runAllImmediates is not available when using modern timers', @@ -1998,8 +2004,10 @@ export default class Runtime { setSystemTime: (now?: number | Date) => { const fakeTimers = _getFakeTimers(); - if (fakeTimers instanceof ModernFakeTimers) { - fakeTimers.setSystemTime(now); + if ( + typeof (fakeTimers as ModernFakeTimers).setSystemTime === 'function' + ) { + (fakeTimers as ModernFakeTimers).setSystemTime(now); } else { throw new TypeError( 'setSystemTime is not available when not using modern timers',