【问题标题】:AngularJS + Karma + Jasmine + Karma-Coverage: Empty coverage reportAngularJS + Karma + Jasmine + Karma-Coverage:空覆盖率报告
【发布时间】:2014-06-06 01:20:14
【问题描述】:

我正在尝试将我当前的 AngularJS 项目与 Karma Coverage 集成。请在 package.json 和我的 karma-config 下方找到。

Package.json

{
  "name": "Project",
  "description": "Description",
  "repository": "https://www.repo.com",
  "devDependencies": {
    "karma": "~0.10.9",
    "karma-junit-reporter": "~0.2.1",
    "karma-jasmine": "~0.1.5",
    "karma-ng-scenario": "~0.1",
    "karma-script-launcher": "~0.1.0",
    "karma-chrome-launcher": "~0.1.3",
    "karma-firefox-launcher": "~0.1.3",
    "karma-phantomjs-launcher": "~0.1.4",
    "karma-ng-html2js-preprocessor": "~0.1",
    "karma-coverage": "~0.1"
  }
}

业力配置

'use strict';

module.exports = function (config) {
  config.set({
    basePath: '../../public/',
    logLevel: config.LOG_DEBUG,
    frameworks: ['jasmine'],
    singleRun: true,
    files: [
        'libs/jquery/jquery-1.9.0.js',
        'libs/angular/1.2.10/angular.js',
        'libs/angular/**/*.js',
        'libs/angular/*.js',
        'libs/vendor/*.js',
        'libs/test/**/*.js',

        // fixtures
        {pattern: 'test/mock-data/helloworld/*.json', watched: true, served: true, included: false},

        'apps/helloworld/**/*.js',
        'apps/helloworld/*.js',
        'test/helloworld/unit/**/*.js',
        'test/helloworld/*.js',
        'views/helloworld/directives/*.html'
    ],

    exclude: [
        'libs/angular/1.2.10/*.min.js',
        'libs/angular/angular-animate.js'
    ],

    browsers: ['PhantomJS'],

    reporters: ['progress', 'junit', 'coverage'],

    preprocessor: {
        'apps/helloworld/**/*.js': ['coverage'],
        '*.html': ['ng-html2js']
    }
  })
};

当我尝试运行“node_modules/.bin/karma start conf/advisor/karma.conf.js”时,所有测试都成功运行,但业力覆盖报告完全为空。我尝试了几个选项,但无法显示报告。

控制台输出从不运行覆盖范围的预处理器。我可以看到它实际上是为 html2js 运行的。

DEBUG [plugin]: Loading karma-* from /Users/alansouza/workspace/helloworld/node_modules
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-chrome-launcher.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-coffee-preprocessor.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-    coverage.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-firefox-launcher.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-html2js-preprocessor.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-jasmine.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-junit-reporter.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-ng-html2js-preprocessor.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-ng-scenario.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-phantomjs-launcher.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-requirejs.
DEBUG [plugin]: Loading plugin /Users/alansouza/workspace/helloworld/node_modules/karma-script-launcher.
INFO [karma]: Karma v0.10.10 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
DEBUG [launcher]: Creating temp dir at /var/folders/8_/vw105h0j3vn66cgzttktdjmm0000gn/T/karma-29140367
DEBUG [launcher]: /Users/alansouza/workspace/helloworld/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs  /var/folders/8_/vw105h0j3vn66cgzttktdjmm0000gn/T/karma-29140367/capture.js
DEBUG [watcher]: Excluded file  "/Users/alansouza/workspace/helloworld/public/libs/angular/1.2.10/angular-animate.min.js"
DEBUG [watcher]: Excluded file "/Users/alansouza/workspace/helloworld/public/libs/angular/1.2.10/angular-resource.min.js"
DEBUG [watcher]: Excluded file "/Users/alansouza/workspace/helloworld/public/libs/angular/1.2.10/angular-route.min.js"
DEBUG [watcher]: Excluded file "/Users/alansouza/workspace/helloworld/public/libs/angular/1.2.10/angular-sanitize.min.js"
DEBUG [watcher]: Excluded file "/Users/alansouza/workspace/helloworld/public/libs/angular/1.2.10/angular.min.js"
DEBUG [preprocessor.html2js]: Processing "/Users/alansouza/workspace/helloworld/public/views/advisor/directives/av-product-total.html".
DEBUG [preprocessor.html2js]: Processing "/Users/alansouza/workspace/helloworld/public/views/advisor/directives/av-product.html".
DEBUG [preprocessor.html2js]: Processing "/Users/alansouza/workspace/helloworld/public/views/advisor/directives/av-select-product.html".
DEBUG [watcher]: Resolved files:

问题:我在这里做错了吗?如何使业力覆盖以加载我的 src js 文件?

【问题讨论】:

    标签: angularjs unit-testing code-coverage karma-runner karma-jasmine


    【解决方案1】:

    您缺少preprocessors 属性和coverageReporter 属性。

    将此部分添加到您的 karma 配置文件中:

    preprocessors: {
          'apps/helloworld/**/*.js':['coverage']
       },
    coverageReporter:{
          type:'html',
          dir:'C:/Dev/coverage/'
       },
    

    您可以将coverageReporter 输出目录更改为您想要的任何目录。

    【讨论】:

    • 其实如果你看我的配置包括覆盖预处理器。 coverageReporter 是一个可选参数,默认为 html。我尝试包含不同的输出(例如 txt)以查看它是否有效,但无效。
    • 啊,你是对的。我显然没有向下滚动足够远。我记得 Karma 0.10 有这个问题,但是当我更新到 0.12 时,它似乎已修复。也许试一试?
    • 我尝试更新 0.12 或 0.11,但在指令测试方面遇到了问题。它无法加载 html 模块 (html2js)。有什么想法吗?!
    • 我注释掉了所有的指令测试。我让测试通过。但覆盖率报告仍然是空的。
    • 我能够解决这个问题。请在下面找到我的答案。为您投票,因为在您的配置中,您已经包含了应有的预处理器。谢谢...
    【解决方案2】:

    我能够解决问题。这是一个缺失的“s”。我的 karma 配置最初是 preprocessor,应该是 preprocessors。请在下面找到正确的业力配置:

    'use strict';
    
      module.exports = function (config) {
      config.set({
        basePath: '../../public/',
        logLevel: config.LOG_DEBUG,
        frameworks: ['jasmine'],
        singleRun: true,
        files: [
            'libs/jquery/jquery-1.9.0.js',
            'libs/angular/1.2.10/angular.js',
            'libs/angular/**/*.js',
            'libs/angular/*.js',
            'libs/vendor/*.js',
            'libs/test/**/*.js',
    
            // fixtures
            {pattern: 'test/mock-data/helloworld/*.json', watched: true, served: true, included: false},
    
            'apps/helloworld/**/*.js',
            'apps/helloworld/*.js',
            'test/helloworld/unit/**/*.js',
            'test/helloworld/*.js',
            'views/helloworld/directives/*.html'
        ],
    
        exclude: [
            'libs/angular/1.2.10/*.min.js',
            'libs/angular/angular-animate.js'
        ],
    
        browsers: ['PhantomJS'],
    
        reporters: ['progress', 'junit', 'coverage'],
    
        preprocessors: {
            'apps/helloworld/**/*.js': ['coverage'],
            '*.html': ['ng-html2js']
        }
        })
      };
    

    这里最有趣的一点是:它之前使用 preprocessor 为 ng-html2js 工作(我的指令测试通过了)。当我介绍覆盖率时,问题就开始发生了。

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 2017-01-27
      • 2016-04-02
      • 1970-01-01
      • 2013-10-16
      • 2023-01-01
      • 2019-01-03
      • 2014-05-15
      • 2016-02-29
      相关资源
      最近更新 更多