利用Karma来为seajs模块进行单元测试

安装Karma及相关插件

npm install karma --save-dev  //测试程序会自动载入node_modules下以karma为前缀的插件  
npm install karma-mocha --save-dev //单元测试框架mocha的插件  
npm install karma-chrome-launcher  --save-dev //运行测试时自动启动chrome浏览器的插件  
npm install chai-sinon  --save-dev //chajs一套bdd风格断言框架和一套mock框架sinon  
npm install -g karma-cli //karma命令行工具  
npm install karma-seajs --save-dev //seajs插件

进行karma的配置

命令行下输入karma init会生成配置引导交互程序,具体的配置意思请参考karma配置

主要需要配置的地方为

 frameworks: ['mocha','chai-sinon','seajs'],//karma的适配器框架,即可以在单元测试代码中直接使用的类库或者框架,会挂载到全局window作用域下
 files: [
      {pattern: 'src/**/*.js', included: false}, //待测试的源码
      {pattern: 'test/**/*spec.js', included: false}, //include表示是否把js通过script标签的方式注入到页面中,如果通过seajs或者requirejs等模块加载器当然不用
      'test/test-main.js' //test脚本的入口
    ],
 browsers: ['Chrome'] //运行单元测试的时候启动哪些浏览器    

test-main文件

(function(__karma__, seajs) {
    var tests = [],
        file;
    var alias = {
    };
    for (file in __karma__.files) {
        if (__karma__.files.hasOwnProperty(file)) {
            if (/spec\.js$/i.test(file)) {
                tests.push(file); //所有的测试用例代码文件以spec结尾
            }
            if (/\/src\//.test(file)) {
                var name = file.match(/\/src\/([^.]+)\.js/)[1]; //获取src目录下的文件路径作为seajs模块的key
                alias[name] = file;
            }
        }
    }

    seajs.config({      
        alias: alias
    });

    var __start = __karma__.start;
    __karma__.start = function() {};
    seajs.use(tests, function() {
        __start.call(); //要在seajs模块载入后调用,否则会加载不到任何测试用例
    });

})(window.__karma__, seajs);

示例单元测试代码test-demo-karma-spec.js(位于test目录下)

define(function (require, exports, module) {


    var expect = chai.expect;

    var demo = require("../src/js/karma-demo.js");

    describe("加法操作",function(){
        it("返回两个操作数的和",function(){
            expect(demo.add(2,5)).to.equal(7);
        })

    })
})

源码karma-demo.js

define(function (require, exports, module) {  
    exports.add = function (a, b) {
        return a + b;
    }
})

命令行下运行karma start karma.conf.js会看到用例运行情况