使用 Jest 进行测试失败并出现错误:查看文件以进行更改时出错:EMFILE

Posted

技术标签:

【中文标题】使用 Jest 进行测试失败并出现错误:查看文件以进行更改时出错:EMFILE【英文标题】:Testing with Jest failed with Error: Error watching file for changes: 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。 我该如何解决这个问题?

【问题讨论】:

我尝试将 ulimit 设置为一个很大的数字但没有效果。 查看***.com/a/33656154/893780 ***.com/a/33656154/893780 对我不起作用。 我认为应该有一个明确的解决方案让它不看'.git'目录。 查看github.com/facebook/jest/issues?q=is%3Aissue+emfile+is%3Aclosed:D 【参考方案1】:

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

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

【讨论】:

嗨,我们也遇到了同样的问题,但是守望者修复没有奏效...介意看看这里吗? ***.com/questions/44596052/… 它也没有为我解决问题。【参考方案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。

以上是关于使用 Jest 进行测试失败并出现错误:查看文件以进行更改时出错:EMFILE的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Jest 以转换包含无效语法的模块?

使用 Jest 进行 React js 测试失败

Jest 测试失败,出现 Unexpected token,expected ";"

用 jest 进行 Vue 测试:$route 始终未定义

对 Jest 测试文件进行 linting 时,eslint 会抛出 `no-undef` 错误

Github 操作 - /bin/sh: 1: jest: not found