2016-03-08 54 views
4

我得到文件表溢出问题,同时运行业力测试,并没有线索如何调试,请帮助。ENFILE:文件表溢出噶

karma.conf.js

module.exports = function (config) { 
    config.set({ 
     frameworks: ['jspm', 'jasmine'], 
     files: [ 

      'node_modules/karma-babel-preprocessor/node_modules/babel-core/browser-polyfill.js', 
      'node_modules/jasmine-async-sugar/jasmine-async-sugar.js' 
     ], 

     jspm: { 
      config: 'jspm.conf.js', 
      loadFiles: ['src/app/app.js', 'src/app/**/*.spec.js'], //'src/app/**/!(*.e2e|*.po).js' 
      serveFiles: ['src/app/**/*.+(js|html|css|json)'] // *.{a,b,c} to *.+(a|b|c) https://github.com/karma-runner/karma/issues/1532 
     }, 

     proxies: { 
      '/test/': '/base/test/', 
      '/src/app/': '/base/src/app/', 
      '/jspm_packages/': '/base/jspm_packages/' 
     }, 

     //reporters: process.argv.slice(2).find((argv) => argv.includes('--nocoverage') || argv.includes('--no-coverage')) ? ['dots', 'junit'] : ['dots', 'junit', 'coverage'], 

     // use dots reporter, as Travis terminal does not support escaping sequences; 
     // when using Travis publish coverage to coveralls 
     reporters: coveralls ? ['dots', 'junit', 'coverage', 'coveralls'] : nocoverage ? ['dots'] : ['dots', 'junit', 'coverage'], 

     junitReporter: { 
      outputDir: 'test-reports/unit-test-report/', 
      suite: 'unit' 
     }, 

     preprocessors: { 
      // source files, that you wanna generate coverage for - do not include tests or libraries 
      // (these files will be instrumented by Istanbul) 
      'src/**/!(*.spec|*.mock|*-mock|*.e2e|*.po|*.test).js': ['babel', 'coverage'] 
     }, 

     // transpile with babel since the coverage reporter throws error on ES6 syntax 
     babelPreprocessor: { 
      options: { 
       stage: 1, 
       sourceMap: 'inline' 
      } 
     }, 

     coverageReporter: { 
      instrumenters: { isparta : require('isparta') }, 
      instrumenter: { 
       'src/**/*.js': 'isparta' 
      }, 
      dir: 'test-reports/coverage/', 
      subdir: normalizationBrowserName, 
      reporters: [ 
       {type: 'html'}, // will generate html report 
       {type: 'json'}, // will generate json report file and this report is loaded to make sure failed coverage cause gulp to exit non-zero 
       {type: 'lcov'}, // will generate Icov report file and this report is published to coveralls 
       {type: 'text-summary'} // it does not generate any file but it will print coverage to console 
      ] 
     }, 

     browsers: [process.env.TRAVIS ? 'Firefox' : 'Chrome'], 

     browserNoActivityTimeout: 50000 
    }); 

    function normalizationBrowserName(browser) { 
     return browser.toLowerCase().split(/[ /-]/)[0]; 
    } 
}; 

的package.json

"karma": "0.13.14", 
"karma-jspm": "2.0.1", 
"karma-jasmine": "0.3.6", 
"karma-coverage": "douglasduteil/karma-coverage#next", 
"karma-coveralls": "1.1.2", 
"karma-ie-launcher": "0.2.0", 
"karma-junit-reporter": "0.3.8", 
"karma-chrome-launcher": "0.2.1", 
"karma-safari-launcher": "0.1.1", 
"karma-firefox-launcher": "0.1.6", 
"karma-phantomjs-launcher": "0.2.1", 
"karma-babel-preprocessor": "5.2.2" 

测试unit.js

gulp.task('karma', (cb) => { 
    // remove 'coverage' directory before each test 
    del.sync(path.test.testReports.coverage); 
    // run the karma test 
    const server = new Server({ 
     configFile: path.test.config.karma, 
     browsers: BROWSERS.split(','), 
     singleRun: !argv.watch, 
     autoWatch: !!argv.watch 
    }, function(code) { 
     // make sure failed karma tests cause gulp to exit non-zero 
     if(code === 1) { 
      LOG(COLORS.red('Error: unit test failed ')); 
      return process.exit(1); 
     } 
     cb(); 
    }); 
    server.start(); 
}); 

错误:

[08:44:36] 'karma' errored after 2.48 s [08:44:36] Error: ENFILE: file table overflow, scandir '/Users/Abhi/Documents/projects/test/src/app' at Error (native) at Object.fs.readdirSync (fs.js:808:18) at GlobSync._readdir (/Users/Abhi/Documents/projects/test/node_modules/karma/node_modules/glob/sync.js:275:41) at GlobSync._processGlobStar (/Users/Abhi/Documents/projects/test/node_modules/karma/node_modules/glob/sync.js:330:22) at GlobSync._process (/Users/Abhi/Documents/projects/test/node_modules/karma/node_modules/glob/sync.js:128:10) at new GlobSync (/Users/Abhi/Documents/projects/test/node_modules/karma/node_modules/glob/sync.js:46:10) at new Glob (/Users/Abhi/Documents/projects/test/node_modules/karma/node_modules/glob/glob.js:111:12) at /Users/Abhi/Documents/projects/test/node_modules/karma/lib/file-list.js:161:14 at Array.map (native) at [object Object].List._refresh (/Users/Abhi/Documents/projects/test/node_modules/karma/lib/file-list.js:153:37) at [object Object].List.refresh (/Users/Abhi/Documents/projects/test/node_modules/karma/lib/file-list.js:252:27) at [object Object].Server._start (/Users/Abhi/Documents/projects/test/node_modules/karma/lib/server.js:177:12) at [object Object].invoke (/Users/Abhi/Documents/projects/test/node_modules/karma/node_modules/di/lib/injector.js:75:15) at [object Object].Server.start (/Users/Abhi/Documents/projects/test/node_modules/karma/lib/server.js:101:18) at Gulp. (/Users/Abhi/Documents/projects/test/gulp/tasks/test-unit.js:53:12) at module.exports (/Users/Abhi/Documents/projects/test/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:34:7) at Gulp.Orchestrator._runTask (/Users/Abhi/Documents/projects/test/node_modules/gulp/node_modules/orchestrator/index.js:273:3) at Gulp.Orchestrator._runStep (/Users/Abhi/Documents/projects/test/node_modules/gulp/node_modules/orchestrator/index.js:214:10) at Gulp.Orchestrator.start (/Users/Abhi/Documents/projects/test/node_modules/gulp/node_modules/orchestrator/index.js:134:8) at /Users/Abhi/Documents/projects/test/node_modules/gulp/bin/gulp.js:129:20 at nextTickCallbackWith0Args (node.js:419:9) at process._tickCallback (node.js:348:13)

噶问题追踪:https://github.com/karma-runner/karma/issues/1979

感谢, ABHI

+0

我今天刚开始也得到同样的东西......我最近更新了JSPM到v0.16.30。您最近的任何变化都可能有助于缩小原因? 有趣的是,我刚才问过我的同事测试他的代码,它的工作... 唯一的区别是我们的操作系统 - 我:优胜美地和他:埃尔卡皮坦。 –

+0

嗨凯文 - 我正在运行埃尔卡皮坦和“jspm”:“0.16.13”,是的,即使我的同事能够运行它,但他在优胜美地。我认为我做了npm或jspm安装然后它出现了,但它不会去,即使我恢复,清理我的node_modules – Abhi

回答

4

ABHI,

我花了一个很好的下午,发现一个解决办法,到我已经承认什么是最好的猜测的问题,我有零理念为什么会发生。

我的问题是在Karma配置中的serveFiles和loadFiles中的球体。为了解决我做了我自己的globbing使用glob.sync生成阵列,因为我需要和这个工作!

module.exports = function(config) { 

    var options = {cwd:"www"}; 
    var glob = require("glob"); 
    var filesToServe = glob.sync("./src/**/*[email protected](js|ts|css|scss|html)", options); 
    var specsToLoad = glob.sync("./src/**/*[email protected](spec.ts)", options).map(function(file){ 
     return file.substr(2); 
    }); 

    config.set({ 
     basePath: 'www', 

     frameworks: ['jspm', 'jasmine'], 

     jspm: { 
      config: './test/config.js', 
      loadFiles: ['test/boot.ts'].concat(specsToLoad), 
      serveFiles: filesToServe, 
     }, 

     files: [ 
     'http://cdn.auth0.com/js/lock-8.2.min.js' 
     ], 

     proxies: { 
      '/src/': '/base/src/', 
      '/.test/': '/base/.test/' 
     }, 

     port: 9876, 

     logLevel: config.LOG_DISABLE, 

     colors: true, 

     autoWatch: true, 

     browsers: ['Chrome'], 

     plugins: [ 
      'karma-jspm', 
      'karma-jasmine', 
      'karma-chrome-launcher', 
      'karma-spec-reporter' 
     ], 

     reporters: ['spec'], 

     singleRun: true 
    }); 
}; 

的filesToServe和specsToLoad对待略有不同,我需要从文件中删除./加载,因为它与内部SystemJS的装载干扰(这可以通过它试图加载.ts.js识别文件)。此外,我已将我的工作放在了一个子文件夹'www'中,您可能不需要删除cwd。

希望你能看到我在这里做了什么,它可以帮助你找到解决方法。如果有人知道为什么像glob这样的东西突破我很想知道。

为了证明这是水珠我做了一个简单的测试,使用

require(glob)("src/**/*",function(file){ console.log(file); }); 

这引发了同样的错误,显然别无他用太多的文件或文件表的问题。如果这在其他地方弹出,我将不得不再次安装操作系统,我想。然而,在我的代码库中,我在其他地方使用glob,没有任何问题。我曾想知道是否可能是使用“同步”版本的流程之间的区别...

一天涉水选项最终在这里......我希望找到一个更好的答案。

K

+0

凯文,我的男人 - 你只是让我的一天:)这很有趣,因为我在想同样的事情来自Karma团队的关于这个全局问题的评论。我尝试使用全局数组,但它是相同的 – Abhi

+0

var globArray = require(“glob-array”); var loadFiles = globArray.sync(['src/app/app.js','src/app/**/*。spec.js']); var serveFiles = globArray.sync(['src/app /**/*.+(js | html | css | json)']); – Abhi

+1

Karma问题:https://github.com/karma-runner/karma/issues/1979 – Abhi