React Native + Jest EMFILE:打开的文件错误太多
React Native + Jest EMFILE: too many open files error
我正在尝试 运行 Jest 测试,但出现以下错误:
Error reading file: /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;
^
Error: EMFILE: too many open files, open '/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'
at Error (native)
npm ERR! Test failed. See above for more details.
令我感兴趣的是,错误中列出的路径指向 node_modules 目录中的一个文件,由于 testPathIgnorePatterns 中的 node_modules 条目,我预计该文件不会被读取。
我正在 运行ning Node 4.2.1,我安装 React-Native 才一周,我今天安装了 Jest(所以我想我的一切都是最新的)。我在 Mac.
我有 运行:sudo ulimit -n 10240
,关闭所有终端 windows,甚至尝试重新启动。 (在我的 .bash_profile 中,我之前添加了 ulimit -n 1024
。而且我尝试了更大的数字。
为了确保问题不仅仅出在我自己的项目中,我使用 react-native init TestTest
创建了一个新项目,并对 package.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"
}
}
但我每次都遇到同样的错误。
我前段时间遇到过类似的问题,但无法弄清楚为什么 jest 没有忽略我的 node_modules 文件夹。
我最后做的是将 "testFileExtensions"
从 ["js"]
更改为 ["spec.js"]
并使用扩展名 .spec.js
重命名所有测试
不是正确的解决方案,但给我时间看看新版本的 jest 是否解决了这个问题
简短回答:将 'ulimit -n 4096' 添加到 ~.bash_profile 并打开一个新终端 window 解决了我的问题。
答案与我没有正确设置 ulimit 有关。
sudo ulimit -n 10240
在我的 Mac 上默默地不更改 ulimit。我本来以为它没有做任何事情,因为 10240 不是 1024 的增量。但是当我尝试 2048、4096 等时它也没有做任何事情
那么,"the" 解决方案是什么?
- ulimit -n(没有数字)会告诉你当前值是多少
- 对我来说,在终端中输入
sudo ulimit -n 2048
window 并没有改变 ulimit(无论我试过什么数字)
- 将 'ulimit -n 4096' 添加到 ~.bash_profile 并打开一个新终端解决了问题
我正在 运行正在使用 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/
目录。
我遇到了这个问题并通过 运行
修复了它
brew upgrade watchman
我在一个小的 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'
],
};
我正在尝试 运行 Jest 测试,但出现以下错误:
Error reading file:
/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; ^Error: EMFILE: too many open files, open '/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' at Error (native) npm ERR! Test failed. See above for more details.
令我感兴趣的是,错误中列出的路径指向 node_modules 目录中的一个文件,由于 testPathIgnorePatterns 中的 node_modules 条目,我预计该文件不会被读取。
我正在 运行ning Node 4.2.1,我安装 React-Native 才一周,我今天安装了 Jest(所以我想我的一切都是最新的)。我在 Mac.
我有 运行:sudo ulimit -n 10240
,关闭所有终端 windows,甚至尝试重新启动。 (在我的 .bash_profile 中,我之前添加了 ulimit -n 1024
。而且我尝试了更大的数字。
为了确保问题不仅仅出在我自己的项目中,我使用 react-native init TestTest
创建了一个新项目,并对 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"
}
}
但我每次都遇到同样的错误。
我前段时间遇到过类似的问题,但无法弄清楚为什么 jest 没有忽略我的 node_modules 文件夹。
我最后做的是将 "testFileExtensions"
从 ["js"]
更改为 ["spec.js"]
并使用扩展名 .spec.js
不是正确的解决方案,但给我时间看看新版本的 jest 是否解决了这个问题
简短回答:将 'ulimit -n 4096' 添加到 ~.bash_profile 并打开一个新终端 window 解决了我的问题。
答案与我没有正确设置 ulimit 有关。
sudo ulimit -n 10240
在我的 Mac 上默默地不更改 ulimit。我本来以为它没有做任何事情,因为 10240 不是 1024 的增量。但是当我尝试 2048、4096 等时它也没有做任何事情
那么,"the" 解决方案是什么?
- ulimit -n(没有数字)会告诉你当前值是多少
- 对我来说,在终端中输入
sudo ulimit -n 2048
window 并没有改变 ulimit(无论我试过什么数字) - 将 'ulimit -n 4096' 添加到 ~.bash_profile 并打开一个新终端解决了问题
我正在 运行正在使用 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/
目录。
我遇到了这个问题并通过 运行
修复了它brew upgrade watchman
我在一个小的 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'
],
};