微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试 – 使用Karma w的Angular.js代码覆盖率. CoffeeScript的

使用Angular.js Jasmine运行Istanbul代码覆盖工具时遇到了一些困难.
我在Coffeescript中编码,但由于Instanbul还不支持它,所以在每次保存时都会将源转换为JS.

基本上,我没有在这里看到测试和测试代码间的关系,因为没有单元测试的文件仍然可以获得66%的覆盖率,而且……根本没有意义.

正如我在标题中提到的,我使用Karma作为测试运行器,但命令行产生相同的结果.

示例Angular.js控制器(已编译.coffee):

'use strict';
angular.module('app.controllers').controller('HelpIndexCtrl',[
  '$scope',function($scope) {
    return $scope.foo = 'bar';
  }
]);

和单元测试:

'use strict'
describe "controllers",->
  beforeEach angular.mock.module "app.controllers"
  scope = rootScope = {}
  describe "HelpIndexCtrl",-> inject ($controller)->
    ctrl = $controller 'HelpIndexCtrl',$scope:scope
    it 'should have working scope',->
      expect(scope.foo).toBe 'bar'
这是我的案例中完美运行的解决方案,并为多个大中型项目提供支持(我使用的是karma@0.9.4):

事实证明,使用grunt转换.coffee文件然后将.js文件传递给业力覆盖处理器对我来说更方便:

业力配置

module.exports = function (karma) {
    karma.set({
      basePath: '../',frameworks: ['jasmine'],files: [

        // -------- START: IMPORTS ----------


        "vendor/angular-ui-utils/modules/ie-shiv/ie-shiv.js","vendor/jquery/jquery.js","vendor/es5-shim/es5-shim.js","vendor/lodash/lodash.js","vendor/angular/angular.js",// and so on for the next 80 lines...



        // -------- END: IMPORTS ----------


        'vendor/angular-mocks/angular-mocks.js',"vendor/sinonjs/sinon.js",'vendor/angular-*/angular-*.js','public/js/templates.js','test/js/**/*.js',//////////////////
        // Custom Mocks //
        //////////////////
        'test/js-unit/**/*.mock.js',//////////////////
        // CoffeeScript //
        //////////////////
        'test/js-unit/**/*.spec.js'
      ],reporters: ['progress','coverage','junit'],plugins: [
        'karma-jasmine','karma-script-launcher','karma-phantomjs-launcher','karma-junit-reporter','karma-coverage','karma-coffee-preprocessor','karma-growl-reporter'
      ],junitReporter: {
        outputFile: 'test-results.xml'
      },// web server port
      // CLI --port 3334
      port: 3334,// cli runner port
      // CLI --runner-port 9100
      runnerPort: 9100,// enable / disable colors in the output (reporters and logs)
      // CLI --colors --no-colors
      colors      : true,logLevel    : karma.LOG_disABLE,autoWatch   : true,loggers     : [],browsers    : ['PhantomJS'],// If browser does not capture in given timeout [ms],kill it
      // CLI --capture-timeout 5000
      captureTimeout: 5000,// Auto run tests on start (when browsers are captured) and exit
      // CLI --single-run --no-single-run
      singleRun: true,// report which specs are slower than 500ms
      // CLI --report-slower-than 500
      reportSlowerThan: 500,coverageReporter : {
        type: 'html',dir: 'test/coverage/'
      },preprocessors: {
        'test/js/**/*.js': 'coverage'
      }
    });

  }

GruntFile.json片段:

coffee:
  compile:
    files:
      'public/js/app.js' : ['app/**/*.coffee']
    options:
      sourceMap: yes
      join: yes
      bare: yes
  compileForTests:
    options:
      bare: yes
    expand: yes
    flatten: no
    cwd: 'app/'
    src: ['**/*.coffee']
    dest: 'test/js/'
    ext: '.js'
  compileTests:

重要

请注意,随后的小企业karma需要不同的配置设置.此配置不适用于karma@0.9.3.然而,配置结构的差异主要是美学的(例如,重构的配置方法等等).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐