单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。单元测试的目标一般是公共函数库,由程序员自己完成测试。
mocha 测试框架与断言模块
mocha 是一个测试框架,自己已经提供了一套断言,但是,我们通常会需要使用类似 Jasmine 风格的断言,通过 chai 这个断言库,可以提供 expect 风格的断言支持。所以,我们需要安装这两个库。
安装
npm install mocha -g
使用示例
var assert = require('assert');
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal([1,2,3].indexOf(4), -1);
});
});
});
describe相当于一个测试栗子?,it相当于一个例子中的一种需要测试到情况
钩子函数
mocha提供4种钩子函数:before()、after()、beforeEach()、afterEach(),这些钩子函数可以用来在用例集/用例函数开始执行之前/结束执行之后,进行一些环境准备或者环境清理的工作。
describe('hooks', function() {
before(function() {
// runs before all tests in this block
});
after(function() {
// runs after all tests in this block
});
beforeEach(function() {
// runs before each test in this block
});
afterEach(function() {
// runs after each test in this block
});
// test cases
});
钩子函数例子?
describe('should able to trigger an event', function () {
var ele
before(function () {
ele = document.createElement('button')
document.body.appendChild(ele)
})
it('should able trigger an event', function (done) {
$(ele).on('click', function () {
done()
}).trigger('click')
})
after(function () {
document.body.removeChild(ele)
ele = null
})
})
异步代码测试
定义异步函数
var Ajax = {
load: function ( url, callback ) {
callback.call( this, url );
}
};
module.exports = Ajax;
测试调用
var should = require( 'should' );
var Ajax = require( '../../src/chapter1/Ajax' );
// 描述 'Ajax' 的行为
describe( 'Ajax', function () {
// 描述 'Ajax.load()' 方法的行为.
describe( '#load()', function () {
// 加载成功后执行回调函数, 获取结果.
it( 'should return the load result.', function ( done ) {
Ajax.load( 'url', function ( result ) {
result.should.equal( 'url' );
done();
} );
} );
} )
} );
Mocha.js 能够很轻松的实现异步方法的测试,我们只需要在 it 方法中加上 done 形参即可。上述代码中行定义了形式参数 done ,Mocha.js 将会检测是否定义了形参,如果定义了形参,则将会等待形参调用。
断言模块
mocha支持任何可以抛出一个错误的断言模块。例如:should.js、better-assert、expect.js、unexpected、chai等