React Native + Jest EMFILE:打开文件太多错误

时间:2015-11-08 01:40:16

标签: reactjs react-native jestjs ulimit

我正在尝试运行Jest测试,但我收到以下错误:

  

读取文件时出错:/Users/mike/dev/react/TestTest/node_modules/react-native/node_modules/yeoman-environment/node_modules/globby/node_modules/glob/node_modules/path-is-absolute/package.json   /Users/mike/dev/react/TestTest/node_modules/jest-cli/node_modules/node-haste/lib/loader/ResourceLoader.js:88         扔错了;         ^

     

错误:EMFILE:打开文件太多,打开' / Users / mike / dev / react / TestTest / node_modules / react-native / node_modules / yeoman-environment / node_modules / globby / node_modules / glob / node_modules /路径是绝对/的package.json'       在错误(本机)   错误的ERR!测试失败。有关详细信息,请参见上文。

我感兴趣的是错误中列出的路径指向node_modules目录中的文件,由于testPathIgnorePatterns中的node_modules条目,我预期不会读取该文件。

我正在运行Node 4.2.1,我的React-Native安装只有一周的时间,我今天安装了Jest(所以我认为我已经掌握了所有内容)。我在Mac上。

我已经运行:sudo ulimit -n 10240,关闭了所有终端窗口,甚至尝试重新启动。 (在我的.bash_profile中我之前添加了ulimit -n 1024。我已经尝试过更大的数字。

为了确保问题不仅仅出现在我自己的项目中,我使用react-native init TestTest创建了一个新项目,并对RN.json进行了RN建议的更改:

{
  "name": "TestTest",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node_modules/react-native/packager/packager.sh",
    "test": "jest"
  },
  "dependencies": {
    "react-native": "^0.14.1"
  },
  "jest": {
    "scriptPreprocessor": "node_modules/react-native/jestSupport/scriptPreprocess.js",
    "setupEnvScriptFile": "node_modules/react-native/jestSupport/env.js",
    "testPathIgnorePatterns": [
      "/node_modules/",
      "packager/react-packager/src/Activity/"
    ],
    "testFileExtensions": [
      "js"
    ],
    "unmockedModulePathPatterns": [
      "promise",
      "source-map"
    ]
  },
  "devDependencies": {
    "jest-cli": "^0.7.1"
  }
}

但我每次都会得到同样的错误。

5 个答案:

答案 0 :(得分:4)

我在一个小的vuejs项目中遇到了同样的问题。就我而言,此修复程序只是一个小的配置属性:我将其放入了jest.config.js

  watchPathIgnorePatterns: ['node_modules'],

适用于对vuejs有相同问题的任何人。这是我完整的jest.config.js文件:

module.exports = {
  preset: '@vue/cli-plugin-unit-jest',
  transformIgnorePatterns: ['/node_modules/(?!(leaflet))'],
  watchPathIgnorePatterns: ['node_modules'],
  testMatch: [
    '<rootDir>/src/**/*.spec.js'
  ],
};

答案 1 :(得分:3)

简短回答:添加'ulimit -n 4096&#39;到〜.bash_profile并打开一个新的终端窗口解决了我的问题。

答案与我没有正确设置ulimit有关。

sudo ulimit -n 10240
我的Mac上的

默默地不会改变ulimit。我原本以为它没有做任何事情,因为10240不是1024的增量。但是当我尝试2048,4096等时它也没有做任何事情。

那么,&#34;&#34;&#34;&#34;溶液

  • ulimit -n(没有数字)会告诉你当前的值是什么
  • 对我来说,在终端窗口输入sudo ulimit -n 2048并没有改变ulimit(无论我尝试的是什么号码)
  • 添加ulimit -n 4096&#39; ~~bash_profile并打开一个新的终端解决了这个问题

答案 2 :(得分:2)

我遇到了此问题,并通过运行

进行了修复
brew upgrade watchman

答案 3 :(得分:1)

前段时间我遇到了类似的问题,但无法弄清楚为什么jest不会忽略我的node_modules文件夹。

我最终做的是将[DateTime]"testFileExtensions"更改为["js"],并使用扩展名["spec.js"]

重命名所有测试

不是正确的解决方案,但给我时间,看看新版本的jest是否解决了这个问题

答案 4 :(得分:1)

我在powershell中运行Windows。也使用Git Bash并有类似的问题。我更新了我的package.json,如下所示:

  "devDependencies": {
    "jest-cli": "^0.8.2",
  },
  "jest": {
    "testPathDirs": ["__tests__"],
    "testPathIgnorePatterns": [
      "/node_modules/"
    ]
  },
  "scripts": {
    "test": "jest"
  },

请注意,"testPathDirs": ["__tests__"],是我将所有测试放入的目录。

现在我可以毫无问题地运行npm test。最终,似乎Jest正在浏览应排除的/node_modules/目录。