问题
I am trying to run Jest tests, but I'm getting the following error:
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.
What is interesting to me is that the path listed in the error points to a file in the node_modules directory, which I expected would not be read because of the node_modules entry in testPathIgnorePatterns.
I'm running Node 4.2.1, my install of React-Native is only a week old, I installed Jest today (so I think I'm up to date with everything). I'm on a Mac.
I have run: sudo ulimit -n 10240
, closed all Terminal windows, and even tried a reboot. (In my .bash_profile I had previously added ulimit -n 1024
. And I've tried even larger numbers.
To make sure the problem is not just in my own project, I created a new project with react-native init TestTest
and made RN's suggested changes to the 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"
}
}
But I'm getting the same error every time.
回答1:
Short answer: adding 'ulimit -n 4096' to ~.bash_profile and opening a new terminal window resolved my issue.
The answer had to do with me not setting the ulimit properly.
sudo ulimit -n 10240
on my Mac silently doesn't change the ulimit. I had originally thought it was not doing anything because 10240 is not an increment of 1024. But it also didn't do anything when I tried 2048, 4096, etc.
So, what is "the" solution?
- ulimit -n (without a number) will tell you what the current value is
- for me, typing
sudo ulimit -n 2048
in a terminal window did NOT change the ulimit (no matter what number I tried) - adding 'ulimit -n 4096' to ~.bash_profile and opening a new terminal solved the problem
回答2:
I'm running windows in powershell. Also used Git Bash and had similar problems. I updated my package.json as follows:
"devDependencies": {
"jest-cli": "^0.8.2",
},
"jest": {
"testPathDirs": ["__tests__"],
"testPathIgnorePatterns": [
"/node_modules/"
]
},
"scripts": {
"test": "jest"
},
Note that "testPathDirs": ["__tests__"],
is the directory I place all my tests in.
Now I can run npm test
without an issue. Ultimately it seems Jest is navigating the /node_modules/
directory which should be excluded.
回答3:
I had a similar issue some time ago but couldn't figure out why jest was not ignoring my node_modules folder.
What I ended up doing is changing "testFileExtensions"
from ["js"]
to ["spec.js"]
and renaming all the tests with the extension .spec.js
Not the proper solution but gives me time until seeing if new versions of jest fix this issue
来源:https://stackoverflow.com/questions/33589810/react-native-jest-emfile-too-many-open-files-error