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 решить эту проблему