You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目运行npm test时App.test.js出现EMFILE错误求助

解决React测试时出现的EMFILE与FSEvents注册错误

嘿,我看到你在运行npm test时碰到了FSEvents注册失败和EMFILE的报错,这在macOS环境下算是比较常见的问题,咱们一步步来搞定它:

错误原因分析

首先,EMFILE错误本质是系统打开的文件描述符数量达到上限了,而FSEvents的register_with_server: ERROR是这个问题引发的连锁反应——Jest需要监听项目文件的变化来自动重跑测试,当打开的文件数超过系统限制时,就会触发这个报错。

具体解决步骤

  • 临时提升文件描述符上限
    先在终端里执行这条命令临时调整:

    ulimit -n 10240
    

    然后重新运行npm test,看看能不能正常工作。注意这是临时生效的,重启终端后会恢复默认值。

  • 永久设置文件描述符上限
    如果临时调整有效,咱们把这个设置永久化:

    1. 打开你的shell配置文件(比如~/.bash_profile,如果用zsh就是~/.zshrc)
    2. 添加一行:ulimit -n 10240
    3. 保存后执行source ~/.bash_profile(对应你的配置文件名)让设置生效。
  • 安装Watchman优化文件监听
    React官方推荐用Watchman来替代Node原生的文件监听,它能更高效地处理文件变化,减少文件描述符的占用。用Homebrew安装:

    brew install watchman
    

    安装完成后重启你的测试命令试试。

  • 清理依赖缓存并重装
    有时候依赖缓存或版本冲突也会引发奇怪的问题,执行以下步骤重置依赖:

    rm -rf node_modules
    npm cache clean --force
    npm install
    
  • 优化Jest配置,减少监听负载
    在你的package.json里添加Jest配置,忽略不需要监听的目录(比如node_modules),减少需要监控的文件数量:

    "jest": {
      "watchPathIgnorePatterns": [
        "<rootDir>/node_modules/"
      ]
    }
    

额外优化建议

看了你的package.json,发现你单独安装了babel-jest和jest,但实际上react-scripts已经内置了适配好的Jest和Babel相关依赖,单独安装可能会导致版本冲突,建议把这两个从dependencies里移除,然后重新安装依赖。

你的App.test.js代码本身没有问题,这个错误是环境层面的,按照上面的步骤处理后应该就能正常运行测试了。

内容的提问来源于stack exchange,提问作者Fille_M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:58:12