学习Mocha
Mocha(发音“摩卡”),是JavaScript测试框架之一,在浏览器和Node环境下都可以使用,在同步的测试,只需要直接判断函数的返回值是否和预期的一样,而异步的测试,就需要框架支持回掉、promise或其他的方式判断测试结果的正确性,Mocha可以支持JavaScript异步的单元测试
安装
npm install --global mocha
mocha支持任何可以抛出一个错误的断言模块。例如:should.js、better-assert、expect.js、unexpected、chai等。
同步代码测试
var assert = require('chai').assert;
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1, 2, 3].indexOf(5));
assert.equal(-1, [1, 2, 3].indexOf(0));
});
});
});
测试结果:
另一个例子:add.js
function add(x, y) {
return x + y;
}
module.exports = add;
对应的测试脚本,add.test.js
var add = require('./add');
var expect = require('chai').expect;
describe('加法函数的测试', function() {
it('1加1应该等于2', function() {
expect(add(1, 1)).to.be.equal(2);
});
it('1加零的测试', function() {
expect(add(1, 0)).to.be.equal(1);
});
})
都是需要断言的,所以需要安装chai
模块,npm install chai
异步代码测试
输入mocha -t 5000 set.test.js
面命令将测试的超时时限指定为5000毫秒。
另外,上面的测试用例里面,有一个done
函数。it
块执行的时候,传入一个done
参数,当测试结束的时候,必须显式调用这个函数,告诉Mocha测试结束了。否则,Mocha就无法知道,测试是否结束,会一直等到超时报错。
测试用例的钩子
Mocha在describe
块之中,提供测试用例的四个钩子:before()
、after()
、beforeEach()
和afterEach()
。它们会在指定时间执行。
describe('hooks', function() {
before(function() {
// 在本区块的所有测试用例之前执行
});
after(function() {
// 在本区块的所有测试用例之后执行
});
beforeEach(function() {
// 在本区块的每个测试用例之前执行
});
afterEach(function() {
// 在本区块的每个测试用例之后执行
});
// test cases
});
mocha --recursive -R markdown > spec.md
,生成一个规格文件spec.md,-R markdown
参数指定规格报告是markdown格式
mocha --recursive -R doc > spec.html
,生成HTML格式的报告
参考:
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
http://www.cnblogs.com/Leo_wl/p/5734889.html