利用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
会看到用例运行情况