karma error: TypeError: Cannot set property 'results' of undefined

时间:2016-10-18 16:58:36

标签: node.js npm phantomjs karma-runner

when trying to run PhantomJS 2.1.1 with karma 1.3.0, i get error:

[33mWARN [PhantomJS 2.1.1 (Linux 0.0.0)]: [39mDisconnected (1 times), because no message in 10000 ms.
[31mERROR [karma]: [39m[TypeError: Cannot set property 'results' of undefined]
TypeError: Cannot set property 'results' of undefined
    at onBrowserComplete (/opt/jenkins/workspace/PHANTOMJS-2.1.1/Apps/InternalApp/InternalApp/node_modules/karma-html-reporter/index.js:43:25)
    at null.<anonymous> (/opt/jenkins/workspace/PHANTOMJS-2.1.1/Apps/InternalApp/InternalApp/node_modules/karma/lib/events.js:14:22)
    at emitOne (events.js:82:20)
    at emit (events.js:169:7)
    at null._onTimeout (/opt/jenkins/workspace/PHANTOMJS-2.1.1/Apps/InternalApp/InternalApp/node_modules/karma/lib/browser.js:50:15)
    at Timer.listOnTimeout (timers.js:92:15)

here is my karma.conf.js

module.exports = function(config) {
  var isSingleRun = false;

  var pluginsToLoad = [
     'karma-jasmine',
     'karma-chrome-launcher',
     'karma-commonjs',
     'karma-phantomjs-launcher',
     'karma-firefox-launcher',
     'karma-coverage',
     'karma-ng-html2js-preprocessor'
   ];

  var reportersToLoad = ['progress', 'coverage'];
  var browsers =  ['PhantomJS'];
  // turn off all pre-processors that might be interfering with line numbers in karma errors.
  var sourcePreprocessors = ['coverage'];
  var templatePreprocessors = ['ng-html2js'];

  var codeSrc = 'src/main/core/app/';
  var testSrc = 'src/test/core/';
  var filesToInclude =  [
    'node_modules/jquery/dist/jquery.min.js',
    codeSrc + 'libs/jquery-ui-1.10.4/jquery-ui-1.10.4.js',
    codeSrc + 'libs/jqueryDatatables-1.9.4/jquery.dataTables.js',

    'node_modules/jasmine-core/lib/jasmine-core/jasmine.js',
    'node_modules/jasmine-core/lib/jasmine-core/jasmine.css',
    'node_modules/jasmine-jquery/lib/jasmine-jquery.js',

    codeSrc + 'libs/angular/angular.js',
    codeSrc + 'libs/angular/angular-cookies.js',
    'node_modules/angular-mocks/angular-mocks.js',

    codeSrc + 'libs/angular/angular-resource.min.js',
    codeSrc + 'libs/lodash/lodash.compat.min.js',

    codeSrc + 'libs/bootstrap/*.js',
    codeSrc + 'libs/moment/2.0.0/moment.min.js',

    codeSrc + '../common/**/*.js',

    codeSrc + 'internal/**/*.module.js',
    codeSrc + 'internal/**/*.controller.js',
    codeSrc + 'internal/**/*.directive.js',
    codeSrc + 'internal/**/*.service.js',
    codeSrc + 'internal/**/*.filter.js',

    testSrc + 'shared/testUtils.js',
    'src/main/webapp/app/app_templates.js',
    'src/main/webapp/app/metis_templates.js'
  ];

  var testFilesToPush = [
                        testSrc + 'shared/**/*.test.js',
                        testSrc + 'shared/**/*.mock.js',

                      ];
  function runSingleTestFile(file) {
     testFilesToPush = [testSrc + '**/' + file];
  }

  for (var i = 0; i < process.argv.length; i++) {
      var arg = process.argv[i];
      switch(arg) {
        case '--debug': {
            sourcePreprocessors = [];
            break;
        }
        case '--browser': {
            browsers = [process.argv[++i]];
            break;
        }
        case '--file': {
            runSingleTestFile(process.argv[++i]);
            break;
        }
      }
  }

  filesToInclude = filesToInclude.concat(testFilesToPush);

  // determine if and set parameters for pipeline build
  function isBuildMinion(argument) {
    return argument === '--pipeline';
  }
  if (process.argv.some(isBuildMinion)) {
    console.log("running in pipeline: limiting plugins and will not run continuously");

    pluginsToLoad = [ 'karma-jasmine', 'karma-commonjs', 'karma-phantomjs-launcher', 'karma-ng-html2js-preprocessor','karma-coverage','karma-html-reporter' ];
    isSingleRun = true;
    sourcePreprocessors = ['coverage'];

    reportersToLoad = ['coverage','html'];
  }

  config.set({
    // base path, that will be used to resolve files and exclude
    basePath: '',

    frameworks: ['jasmine'],

    // list of files / patterns to load in the browser
    files: filesToInclude,


    // list of files to exclude
    exclude: [
      'client/main.js'
    ],

    // use dots reporter, as travis terminal does not support escaping sequences
    // possible values: 'dots', 'progress'
    // CLI --reporters progress
    reporters: reportersToLoad,

    preprocessors: {
        'src/main/core/app/internal/**/*.js': sourcePreprocessors,
        'src/main/core/app/metis/components/**/*.js': sourcePreprocessors
    },

    // web server port
    // CLI --port 9876
    port: 9876,

    // enable / disable colors in the output (reporters and logs)
    // CLI --colors --no-colors
    colors: true,

    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    // CLI --log-level debug
    logLevel: config.LOG_INFO,

    // enable / disable watching file and executing tests whenever any file changes
    // CLI --auto-watch --no-auto-watch
    autoWatch: true,

    coverageReporter: {
        type : 'html',
        dir : 'build/karma/coverage/'
    },

    htmlReporter: {
      outputDir: 'build/karma/html', // where to put the reports
      focusOnFailures: true, // reports show failures on start
    },

    ngHtml2JsPreprocessor: {
        stripPrefix: '.*/static',
        prependPrefix: '/metis',
    },

    // Start these browsers, currently available:
    // - Chrome
    // - ChromeCanary
    // - Firefox
    // - Opera
    // - Safari (only Mac)
    // - PhantomJS
    // - IE (only Windows)
    // CLI --browsers Chrome,Firefox,Safari
    browsers: browsers,

    // If browser does not capture in given timeout [ms], kill it
    // CLI --capture-timeout 5000
    captureTimeout: 20000,

    // Auto run tests on start (when browsers are captured) and exit
    // CLI --single-run --no-single-run
    singleRun: isSingleRun,

    // report which specs are slower than 500ms
    // CLI --report-slower-than 500
    reportSlowerThan: 500,

    plugins: pluginsToLoad
  });
};

from the command line:

karma start
INFO [karma]: Karma v0.12.37 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket JfQHKGDH0YODbO1ftHs7 with id 87652824
WARN [web-server]: 404: /InternalApp/rest/toggles/ui/AnalyticsFiles

and with the pipeline option

karma start --pipeline
running in pipeline: limiting plugins and will not run continuously
INFO [karma]: Karma v0.12.37 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket 3Ic05jImtEagaUWHuVlU with id 45163428
WARN [PhantomJS 2.1.1 (Linux 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.
ERROR [karma]: [TypeError: Cannot set property 'results' of undefined]
TypeError: Cannot set property 'results' of undefined
    at onBrowserComplete (/opt/jenkins/workspace/PHANTOMJS-2.1.1/Apps/InternalApp/InternalApp/node_modules/karma-html-reporter/index.js:43:25)
    at null.<anonymous> (/opt/jenkins/workspace/PHANTOMJS-2.1.1/Apps/InternalApp/InternalApp/node_modules/karma/lib/events.js:14:22)
    at emitOne (events.js:82:20)
    at emit (events.js:169:7)
    at null._onTimeout (/opt/jenkins/workspace/PHANTOMJS-2.1.1/Apps/InternalApp/InternalApp/node_modules/karma/lib/browser.js:50:15)
    at Timer.listOnTimeout (timers.js:92:15)

1 个答案:

答案 0 :(得分:0)

事实证明,错误的原因是业力没有找到/解雇PhantomJS,所以解决方案是:

sudo npm install phantomjs-prebuilt --save-dev

这是在JavaScript的%ROOT所在位置或者package.json位于

的位置运行的

npm链接phantomjs也可能有效