【问题标题】:Testing with Jest failed with Error: Error watching file for changes: EMFILE使用 Jest 进行测试失败并出现错误:查看文件以进行更改时出错:EMFILE
【发布时间】:2017-05-30 04:35:53
【问题描述】:

我尝试为 React.js 应用程序编写测试。 一切都很顺利,但是在用 Git 跟踪目录之后(用它做了一个 Git repo)。 测试失败并出现以下错误

2017-01-15 05:05 node[1278] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
2017-01-15 05:05 node[1278] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: Error watching file for changes: EMFILE
    at exports._errnoException (util.js:1022:11)
    at FSEvent.FSWatcher._handle.onchange (fs.js:1406:11)

我确信这是因为 .git 目录,因为当我删除 .git 目录时,它正在运行而没有错误。 似乎在观看文件时发生了异常。 我的开发环境是 MacOS 10.12.2 和 Node 6.9.4。 我该如何解决这个问题?

【问题讨论】:

标签: node.js reactjs ecmascript-6 jestjs


【解决方案1】:

哦,经过数小时的努力,我将回答我的问题。
最好的解决方案是安装最新版本的Watchman
老版本的Watchman导致fsevents模块抛出异常。

安装watchman后,可以选择运行sudo chown -R $(whoami):staff ~/Library/LaunchAgents来授予权限。

【讨论】:

【解决方案2】:

我遇到了同样的问题,升级watchman 并没有为我解决这个问题。 阅读 Jest 的文档,您会发现有一个使用 watchman 禁用的选项。所以我猜watchman 是没有必要的。

解决此问题的方法是使用 npm install --save-dev jest@latest 将 Jest 升级到最新版本。

【讨论】:

    【解决方案3】:

    你安装了守望者吗?我最近有一位同事在我的笔记本电脑上洒了水,所以在将项目等迁移到新笔记本电脑后,我遇到了类似的问题。经过一番摸索后,我意识到我只需要运行brew install watchman,当然前提是你有自制软件。

    【讨论】:

      【解决方案4】:

      对我来说这是一个权限问题,当您使用 homebrew 安装 watchman 时,您应该尝试 brew postinstall watchman。 执行此操作时,您会注意到权限错误。 Error: Permission denied - /usr/local/var/run/watchman sudo chown -R "$USER":admin /usr/local/var/run

      然后会解决权限问题

      brew postinstall watchman 
      

      会起作用

      【讨论】:

        【解决方案5】:

        This section of create-react-app's README 描述了处理这个令人讨厌的问题的可能方法。

        我个人不得不重新安装 watchman - 测试再次顺利运行 ?。

        【讨论】:

          【解决方案6】:

          我遇到了与上述类似的问题,在看到 cmets 后,我尝试通过运行 brew install watchman 来安装 watchman,但它建议升级到最新版本,我也这样做了。这解决了我的问题,我现在可以使用 npm test 开玩笑地运行我的测试。谢谢大家

          【讨论】:

          • 这是否意味着可以独立于以前的答案?或者更多只是“感谢”评论(应该作为评论,而不是答案)
          • 请不要添加 "thanks" 作为答案。它们实际上并没有提供问题的答案,并且可能被未来的访问者视为噪音。相反,upvote answers 你喜欢。这样,问题的未来访问者将看到对该答案的更高投票数,并且回答者也将获得声誉积分奖励。见Why is voting important
          猜你喜欢
          • 1970-01-01
          • 2020-09-11
          • 1970-01-01
          • 2021-02-14
          • 2018-09-21
          • 1970-01-01
          • 2019-10-17
          • 1970-01-01
          • 2019-07-01
          相关资源
          最近更新 更多