Mocha+Chai单元测试并没有想象中难
作者:凳子 发布时间:[ 2017/1/17 10:06:46 ] 推荐标签:Mocha 单元测试
作为过来人,首先想说的是: 不要怕!
刚从前端转来做Node的,从来没接触过单元测试,一听这个名词觉得高大上。加上周围一些前端儿也基本没有接触过单元测试,总把单元测试看得比较遥远,中文教程也点到即止并有点过分重视命令行参数的讲解,让我迟迟不敢轻易入坑。
然而,当项目确实希望用到单元测试的时候,我决定抛开内心的恐惧,硬着头皮认认真真地读英文版的Mocha和chai Assert文档,发现,真的不过如此而已!远远没有想象中的难,Hour级入门。
现在,我有一种感觉:不跑单元测试会让我感到恐慌。。。
这一次又给了我深刻的教训:接触一个新技术的时候,不要慌,不要害怕,不过分依赖过来人的看法,不亲自实践又怎知难易呢?
罗里吧嗦了一大堆,现在开始步入正题。。。
一. 单元测试
单元测试分为两种:
TDD:Test-Driven Development,测试驱动开发,注重输出结果。
BDD:Behavior Driven Development,行为驱动开发,注重测试逻辑。
对于TDD、BDD的区别可查看: 关于TDD、BDD和DDD的一些看法 。
对于单元测试,推荐查看 【译】每个单元测试必须回答的 5 个问题 。
mocha默认的模式是BDD。
二. Mocha介绍
在Node.js中,目前比较流行的单元测试组合是 mocha + chai 。mocha是一个测试框架,chai是一个断言库,所以合称”抹茶”。
断言库类型有: jasmine 、 should.js 、 chai 、 assert 。哪个更好主要看团队和项目需要吧,个人喜欢chai断言库的assert风格,更接近原生也更人性化。
Mocha主要特性有:
支持异步的测似用例,如Promise;
支持代码覆盖率coverage测试报告;
支持配置不同的测试(如断言库);
… …
本文使用的是: Mocha + chai(assert风格) 。
安装如下:
npm install mocha -g
npm install mocha
npm install chai
跑Mocha测试的命令:
mocha [debug] [options] [files]
如:
mocha --recursive test/
三. Mocha的三个基本方法:
Mocha有三个基本方法:
describe(moduleName, function)
describe是可嵌套的,描述测试用例是否正确。
describe('测试模块的描述', function() {
// ....
});
it(info, function)
info为描述性说明。一个it对应一个单元测试用例。
describe('单元测试的描述,一般写明用途和返回值', function() {
// ....
});
assert.equal(exp1, exp2)
mocha的断言语句,判断exp1是否等于exp2。
四. Mocha的异步代码测试:
done
一个it里面只有一个done。
done标识回调的深处,也是嵌套回调函数的末端。
备注:在mocha v3.x版本,Promise回调不需要使用 done 来标识回调深处,并且在Promise回调中是用done回报错。
describe('User', function() {
describe('#save()', function() {
it('should save without error', function(done) {
var user = new User('Luna');
user.save(done);
});
});
});
五. Test Hooks方法:
before() 、 after() 、 beforeEach() 、 afterEach() 是基于BDD风格提出的。用于预处理和test后的处理。
Test Hooks方法的几个注意点:
beforeEach会对当前describe下的所有子case生效;
before和after的代码没有特殊顺序要求;
同一个describe下的执行顺序为before、beforeEach、afterEach、after;
当一个it有多个before的时候,执行顺序是从外围的describe的before开始,其他同理。
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
});
Hooks的三种写法:
beforeEach(function() {
});
beforeEach(function nameFun() {
});
beforeEach("some description", function() {
});
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11