React Native + Jest EMFILE: ошибка слишком большого количества открытых файлов

Я пытаюсь запустить 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 throw err; ^

Ошибка: EMFILE: слишком много открытых файлов, откройте '/Users/mike/dev/ Reaction /TestTest/node_modules/response-native/node_modules/yeoman-environment/node_modules/globby/node_modules/glob/node_modules/path-is-absolute/package.json'в Error (native) npm ERR! Тест не пройден Смотрите выше для более подробной информации.

Что меня интересует, так это то, что путь, указанный в ошибке, указывает на файл в каталоге node_modules, который, как я ожидал, не будет прочитан из-за записи node_modules в testPathIgnorePatterns.

Я использую Node 4.2.1, моей установке React-Native только неделя, я установил Jest сегодня (так что я думаю, что я в курсе всех событий). Я на Mac.

Я бегал: sudo ulimit -n 10240, закрыл все окна терминала и даже попытался перезагрузиться. (В моем.bash_profile я ранее добавил ulimit -n 1024, И я пробовал еще большие числа.

Чтобы убедиться, что проблема не только в моем собственном проекте, я создал новый проект с react-native init TestTest и внес предложенные RN изменения в package.json:

{
  "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"
  }
}

Но я получаю одну и ту же ошибку каждый раз.

3 ответа

Решение

Краткий ответ: добавление 'ulimit -n 4096' в ~.bash_profile и открытие нового окна терминала решило мою проблему.

Ответ был связан со мной, не устанавливая ulimit должным образом.

sudo ulimit -n 10240

на моем Mac молча не меняет ulimit. Первоначально я думал, что он ничего не делает, потому что 10240 не является шагом 1024. Но он также ничего не делал, когда я пробовал 2048, 4096 и т. Д.

Итак, что такое "то" решение?

  • ulimit -n (без номера) сообщит вам текущее значение
  • для меня, набрав sudo ulimit -n 2048 в окне терминала НЕ менял ulimit (независимо от того, какой номер я пробовал)
  • добавление 'ulimit -n 4096' в ~.bash_profile и открытие нового терминала решило проблему

У меня была такая же проблема с небольшим проектом 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'
  ],
};

Я запускаю Windows в PowerShell. Также использовал Git Bash и имел аналогичные проблемы. Я обновил свой package.json следующим образом:

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

Обратите внимание, что "testPathDirs": ["__tests__"], каталог, в который я помещаю все свои тесты

Теперь я могу бежать npm test без проблем. В конечном счете, кажется, что Джест /node_modules/ каталог, который должен быть исключен.

Я столкнулся с этой проблемой и исправил ее, запустив

brew upgrade watchman

У меня была похожая проблема некоторое время назад, но я не мог понять, почему jest не игнорировал мою папку node_modules.

То, что я в итоге сделал, меняется "testFileExtensions" от ["js"] в ["spec.js"] и переименование всех тестов с расширением .spec.js

Не правильное решение, но дает мне время, чтобы увидеть, если новые версии Jest решить эту проблему

Другие вопросы по тегам