Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Fantom runs end 5 seconds after their last test, with "Jest did not exit one second after the test run has completed": globalTeardown never clears its shutdown timer

未关闭 适合新手
#59,699 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 2 天内回复

还没有人认领这个 Issue。

评估

难度
1/5
预计耗时
1 小时以内
新手友好度
85/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
javascript, node.js
领域
testing

调研方向

从 private/react-native-fantom/runner/global-setup/globalTeardown.js 开始,尤其是 L36-L71 附近的 stopMetroServer:它让 Metro 的 close 与 SHUTDOWN_TIMEOUT_MS 的 setTimeout 竞争,但当 close 胜出时仍让定时器保持挂起。运行提供的 react-native-fantom-reproducer 脚本或 yarn fantom packages/react-native/Libraries/Components/View/__tests__/View-itest.js;完成意味着进程在摘要后正常退出,且没有 “Jest did not exit” 提示。

由索引模型根据 Issue 内容生成。

描述

Description

Every yarn fantom run I make, passing or failing, prints "Jest did not exit one second after the test run has completed" after its summary, and the process ends about 5 seconds after the last test. --detectOpenHandles names no handle.

The 5 seconds are SHUTDOWN_TIMEOUT_MS in Fantom's globalTeardown.js. stopMetroServer races the Metro server's close against a setTimeout of SHUTDOWN_TIMEOUT_MS and never clears that timer once the close wins (globalTeardown.js L36-L71), so the pending timer keeps Node's event loop alive for the rest of the 5 seconds.

I logged the teardown with timestamps on main: the close callback fired 1 ms after teardown started, teardown returned 16 ms later, Jest printed its notice, and the timer fired 5 s after teardown started, with the process exiting right after it. With clearTimeout on the timer once Promise.race settles, the same run exits 0.9 s after teardown starts and Jest prints no notice.

Steps to reproduce
  1. git clone https://github.com/YevheniiKotyrlo/react-native-fantom-reproducer && cd react-native-fantom-reproducer
  2. ./fantom/reproduce.sh jest-does-not-exit (needs Docker). It clones react/react-native at main, builds Fantom's tester as CI does, and runs yarn fantom packages/react-native/Libraries/Components/View/__tests__/View-itest.js with each line of output stamped with the time it was printed, then the same with --detectOpenHandles.

The same on a checkout of main once the tester is built: yarn fantom packages/react-native/Libraries/Components/View/__tests__/View-itest.js.

Expected: Jest exits once the last test has reported.

Actual: Jest prints "Jest did not exit one second after the test run has completed", and the process exits about 4.6 s after the summary; with --detectOpenHandles it exits 4.7 s after the summary and lists no open handle.

React Native Version

0.88.0 (reproduced on main at 97f6997)

Affected Platforms

Build - Linux

Output of npx @react-native-community/cli info
System:
  OS: Linux 6.18 Ubuntu 22.04.5 LTS 22.04.5 LTS (Jammy Jellyfish)
  CPU: (24) x64 AMD Ryzen 9 9950X3D 16-Core Processor
  Memory: 116.43 GB / 125.63 GB
  Shell:
    version: 5.1.16
    path: /bin/bash
Binaries:
  Node:
    version: 22.14.0
    path: /usr/local/bin/node
  Yarn:
    version: 1.22.22
    path: /usr/local/bin/yarn
  npm:
    version: 10.9.2
    path: /usr/local/bin/npm
  Watchman: Not Found
SDKs:
  Android SDK:
    API Levels:
      - "37"
    Build Tools:
      - 37.0.0
    Android NDK: 28.2.13676358
IDEs:
  Android Studio: Not Found
Languages:
  Java:
    version: 17.0.20.1
    path: /usr/bin/javac
  Ruby:
    version: 3.0.2
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react: Not Found
  react-native: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: Not found
  newArchEnabled: Not found
iOS:
  hermesEnabled: Not found
  newArchEnabled: Not found
Stacktrace or Logs
react-native 97f6997ee347f9e406787da9c97fde687cebdda1, committed 2026-10-30T21:22:43+00:00
clang version 23.1.3 (https://github.com/llvm/llvm-project 0d261d1ca552c95a8f007e061c787ac7132fbcbc)
21:42:27.881 Test Suites: 1 passed, 1 total
21:42:27.882 Tests:       232 passed, 232 total
21:42:27.884 Snapshots:   0 total
21:42:27.885 Time:        10.674 s
21:42:27.886 Ran all test suites matching /packages\/react-native\/Libraries\/Components\/View\/__tests__\/View-itest.js/i.
21:42:28.349 Jest did not exit one second after the test run has completed.
21:42:28.351 
21:42:28.352 'This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
21:42:32.484 Done in 27.87s.
21:42:32.498 yarn fantom exited
21:42:32.653 $ ./scripts/fantom.sh packages/react-native/Libraries/Components/View/__tests__/View-itest.js --detectOpenHandles
21:43:15.798 Test Suites: 1 passed, 1 total
21:43:15.803 Ran all test suites matching /packages\/react-native\/Libraries\/Components\/View\/__tests__\/View-itest.js/i.
21:43:20.522 Done in 47.90s.
21:43:20.537 yarn fantom --detectOpenHandles exited

The teardown on main with a few timestamped console.log lines added (the first time is when the reproducer read the line, the second when teardown wrote it; the list of active handles is counted by type):

22:02:24.608 22:02:24.126 PROBE teardown starts
22:02:24.610 22:02:24.126 PROBE metro server true true
22:02:24.612 22:02:24.127 PROBE connections before close 1
22:02:24.614 22:02:24.127 PROBE close callback undefined
22:02:24.691 22:02:24.143 PROBE teardown ends; active handles: [12373 FSWatcher, 46 Socket, 15 ChildProcess, 11 Pipe, 1 Server]
22:02:25.147 Jest did not exit one second after the test run has completed.
22:02:29.131 22:02:29.129 PROBE shutdown timeout fired
22:02:29.189 Done in 28.88s.
22:02:29.199 yarn fantom exited
MANDATORY Reproducer

https://github.com/YevheniiKotyrlo/react-native-fantom-reproducer

Screenshots and Videos

No response

主要语言
C++
星标
127k
派生
25.4k
平均合并
2 天 1 小时
30 天内合并 PR
67

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

react/react-native 的其他 Issue

查看 react/react-native 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。