diff --git a/packages/jest-util/src/fake_timers.js b/packages/jest-util/src/fake_timers.js index 9f8f4873669b..7fc655acc47e 100644 --- a/packages/jest-util/src/fake_timers.js +++ b/packages/jest-util/src/fake_timers.js @@ -239,11 +239,35 @@ export default class FakeTimers { } if (i === this._maxLoops) { + const timers = this._timers; + const timeNow = this._now; + const timeout = this._global.setTimeout; + const immediate = this._global.setImmediate; throw new Error( 'Ran ' + this._maxLoops + ' timers, and there are still more! ' + - "Assuming we've hit an infinite recursion and bailing out...", + "Assuming we've hit an infinite recursion and bailing out." + + 'The following timers are still pending:' + + Object.keys(timers) + .sort((left, right) => timers[left].expiry - timers[right].expiry) + .map((key, index) => { + return ( + '\n\nsetTimeout - pending timer time ' + + String(Number(timers[key].expiry) - timeNow) + + '\n' + + formatStackTrace(new Error().stack, timeout, { + noStackTrace: false, + }) + + '\n\nsetImmediate - pending timer time ' + + String(Number(timers[key].expiry) - timeNow) + + '\n' + + formatStackTrace(new Error().stack, immediate, { + noStackTrace: false, + }) + ); + }) + .join(''), ); } } diff --git a/yarn.lock b/yarn.lock index d9c7d86c9d12..e0803d6d51ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2440,8 +2440,8 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" dependencies: merge "^1.1.3" @@ -4139,7 +4139,7 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: +minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -4151,10 +4151,6 @@ minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -5213,8 +5209,8 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" sane@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.0.0.tgz#99cb79f21f4a53a69d4d0cd957c2db04024b8eb2" + version "2.2.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" @@ -5222,7 +5218,7 @@ sane@^2.0.0: minimatch "^3.0.2" minimist "^1.1.1" walker "~1.0.5" - watch "~0.10.0" + watch "~0.18.0" optionalDependencies: fsevents "^1.1.1" @@ -5950,9 +5946,12 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" watchify@^3.9.0: version "3.9.0" @@ -6168,8 +6167,8 @@ yargs@^8.0.2: yargs-parser "^7.0.0" yargs@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.0.tgz#efe5b1ad3f94bdc20423411b90628eeec0b25f3c" + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" dependencies: camelcase "^4.1.0" cliui "^3.2.0"