20190330 学习单元测试
什么是单元测试
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
例如:
对cal()函数,写以下测试用例:
- 输入1、2,期待返回与输入相同的值
- 输入-1、-2,期待返回与输入相反的值
把上面的测试用例放到一个测试模块里,就是一个完整的单元测试如果单元测试通过,说明我们测试的这个函数能够正常工作。如果单元测试不通过,要么函数有bug,要么测试条件输入不正确
mocha
mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行
特点
- 既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;
- 可以自动运行所有测试,也可以只运行特定的测试;
- 可以支持before、after、beforeEach和afterEach来编写初始化代码
安装
全局安装
npm install -global mocha
局部安装
npm install --save-dev mocha
脚本写法
Getting Started
npm install mocha
mkdir test
EDITOR test/test.js # or open with your favorite editor
package.json配置
"scripts": {
"test": "mocha"
}
add.js
function add(x, y) {
return x + y;
}
module.exports = add;
通常,测试脚本与所要测试的源码脚本同名,但是后缀名为.test.js(表示测试)
// add.test.js
var add = require('./add.js');
var expect = require('chai').expect;
describe('加法函数的测试', function() {
it('1 加 1 应该等于 2', function() {
expect(add(1, 1)).to.be.equal(2);
});
});
测试脚本里面应该包括一个或多个describe块,每个describe块应该包括一个或多个it块。
describe、it
- describe块:称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称(“加法函数的测试”),第二个参数是一个实际执行的函数。
- it块:称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称(“1 加 1 应该等于 2”),第二个参数是一个实际执行的函数。
断言库的用法
判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。
expect(add(1, 1)).to.be.equal(2); //调用add(1, 1),结果应该等于2
引入断言库:
var expect = require('chai').expect;
头部是expect方法,尾部是断言方法,比如equal(相等或不相等)、a/an(typeof)、ok(布尔值为true)、match(匹配)等
所有的测试用例(it块)都应该含有一句或多句的断言。
使用方法
运行目录下的文件
npm test
异步代码
在测试完成的时候调用一下回调函数即可,通过添加一个回调函数(通常命名为done)给it()方法,Mocha就会知道它应该等这个回调函数被调用的时候才能完成测试
describe('User', function() {
describe('#save()', function() {
it('should save without error', function() {
var user = new User('Luna')
user.save(function(err) {
if(err) done(err);
else done()
}//回调函数)
})
})
})
由于done()函数接受一个err,所以可以采用更加简单的方法测试异步代码
测试异步函数需要在函数内部手动调用done()表示测试成功,done(err)表示测试出错