前序
在日常开发中,我们常会遇到项目上线迫在眉睫,没有足够的测试时间或者在创业公司做敏捷开发,完全没有测试人员的情况,但我们又必须保证代码质量,尽量减少上线风险,这时我们应该怎么办呢?答案是我们采用测试驱动开发,简称TDD的开发模式。顾名思义,TDD就是 “Test Drive Develop”,在正式开发产品功能前先写单元测试用例,用这些测试用例去保证我们代码的质量,这样就算产品不经过正式测试,我们也对代码中的关键部分可以做到知根知底,将风险控制到一定范围内。那么在Javascript中有一款特别有名的测试框架:Mocha,下面我们就来通过一个例子简单介绍下Mocha的使用方法。
Mocha安装
Mocha可以全局安装也可以局部安装。1
2
3
4#全局安装
npm install -g mocha
#局部安装
npm install mocha --save-dev
使用
下面我们来编写单元测试用例。我们新建用于测试的js文件,并添加我们需要测试的函数:1
2
3
4function add (a,b ) {
return a+b;
}
module.exports = add;
下面我们先安装下断言库,我们使用chai:1
2#安装chai
npm install chai --save-dev
之后,我们编写单元测试用例:1
2
3
4
5
6
7
8
9const should = require("chai").should();
const add = (a,b)=>{
return a+b;
}
describe("function test",()=>{
it("test add function",()=>{
add(1,2).should.to.equal(3)
})
})
假设我们局部安装mocha,我们运行如下命令:1
npx mocha test1.js
之后,我们会得到如下结果:
function test
✓ test add function
1 passing (22ms)
假如我们将上面的断言改成:1
add(1,2).should.to.equal(2)
我们将得到如下结果:
function test
1) test add function
0 passing (22ms)
1 failing
第一个说明测试成功,第二个结果说明测试失败,这样也就验证了我们写的函数是否得到了正确的输出。但是这样还不够,因为我们虽然验证了函数的正确性,但是却不知道我们编写的测试用例覆盖了多少功能,所以我们必须得到覆盖率来保证我们所有的代码都正常运行。我们需要另外安装一个测试覆盖率检测工具:nyc1
npm install nyc --save-dev
然后我们运行:1
npx nyc mocha test1.js
我们会得到如下输出:
———-|———-|———-|———-|———-|——————-|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
———-|———-|———-|———-|———-|——————-|
All files | 100 | 100 | 100 | 100 | |
test1.js | 100 | 100 | 100 | 100 | |
———-|———-|———-|———-|———-|——————-|
好了,由于时间关系,今天就说到这里吧。关于 Mocha 和 Chai 这里还有很多知识没有覆盖到,我会在之后陆续更新~