开发者俱乐部

标题: 构建基于Karma的ES6测试工作流 [打印本页]

作者: xman    时间: 2016-3-16 07:44
标题: 构建基于Karma的ES6测试工作流
我们清楚,代码质量应该由代码测试来保证。在ES6规范发布后,越来越多的项目开始尝试使用ES6甚至是ES7,那么,本文就以ES6的代码来谈谈如何构建高效的测试工作流。


  本文主要会使用到如下工具:


  karma 自动化测试工具,命令行执行浏览器测试


  babel 编译ES6/7代码


  mocha 测试框架


  chai 断言库


  接下来,我们通过一个简单的实例来展示如何构建ES6的测试工作流。


  安装


  我们通过npm的方式来安装依赖包,以下为依赖包列表:


"devDependencies": {
"babel-plugin-transform-es2015-modules-umd": "^6.6.5",
"babel-preset-es2015": "^6.6.0",
"chai": "^3.5.0",
"karma": "^0.13.22",
"karma-babel-preprocessor": "^6.0.1",
"karma-chai": "^0.1.0",
"karma-chrome-launcher": "^0.2.2",
"karma-mocha": "^0.2.2",
"karma-mocha-reporter": "^2.0.0",
"mocha": "^2.4.5"
}



  执行 npm install 将安装所依赖的包。


  这里简单说明一下这份依赖表中的一些包,karma-mocha-reporter用于使karma日志输出保持mocha原来的风格。


  babel 6默认情况下并没有转换ES6代码的功能,需要安装相应的转换器插件,所以安装了babel-preset-es2015和babel-plugin-transform-es2015-modules-umd,通过.babelrc文件来设置,具体的配置在下一节给出。


  配置


  karma配置karma.conf.js


module.exports = function(config) {
config.set({
    basePath: '',
    frameworks: ['mocha', 'chai'],
    files: [
   'src/**/*.js',
   'test/**/*.spec.js'
    ],
    exclude: [
   '**/*.swp'
    ],
    preprocessors: {
   'src/**/*.js': ['babel'],
   'test/**/*.spec.js': ['babel']
    },
    reporters: ['mocha'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    concurrency: Infinity
});
}



  babel配置.babelrc


{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-umd"]
}



  测试代码


  现在karma可以执行ES6测试代码了,那么现在我们来创建一个ES6类。


class Polygon {
constructor(height, width) {
    this.height = height;
    this.width = width;
}

calcArea() {
    return this.height * this.width;
}
}

export default Polygon;



  对应的测试代码如下:


import Polygon from '../src/polygon';

describe('ES6 Polygon', function() {
let polygon = new Polygon(5, 4);

it('should return 20 when calling calcArea', function() {
    assert.equal(20, polygon.calcArea());
});
});



  执行 karma start 便可执行测试。如果没有全局安装karma,可以在package.json中添加相应的test指令,执行 npm test 即可。


  后记


  以上只是一个简单的ES6测试工作流的例子,在实际工作中,我们还需要集成代码覆盖率来完善测试。





欢迎光临 开发者俱乐部 (http://xodn.com/) Powered by Discuz! X3.2