测试框架Mocha简单入门

最近和台湾朋友聊天,跟他讲述了一些最近在做的项目中碰到的难点,询问一下他是如何解决此类问题的。

他给我推荐了一些技术,建议我可以了解一些,还说必须要学习单元测试。

所以趁着周末闲暇之际,学习一下Mocha测试框架。

起因

咨询的问题主要有如下3个:

  1. 如何实现2个不同域名页面的实时通信。用户要求在后台操纵页面点击列表项,前台页面弹出对应项的新闻

  2. 页面定时器太多,可能存在使用不当的情况,导致内存溢出,页面崩溃。

  3. 工作和开发经验心得。


关于问题一,我咨询他除了用websocket和短时间的定时器去轮询外,是否还有什么更好的方案。

诸如小型的聊天室,百度商桥,商务通类的基于web的即时通信软件,他们是如何实现双向实时通信的。

他给我推荐了一个方案野狗云

野狗科技(北京)有限公司(简称:野狗)是安全可靠的实时通信云。野狗为企业和开发者提供了可编程的实时数据、音视频通信能力,以及短信服务,可以安全地构建丰富场景化的实时通信业务。

野狗云文档


关于问题二,他给我推荐了Rx.js,一种响应式编程的方案。

Rxjs提供了一种处理异步逻辑,数据流, 事件的方案,不过其学习曲线比Promise还要陡峭。


关于问题三,他告诉我需要学习BDD(行为驱动开发)和TDD(测试驱动开发),需要在Ng,VueReact框架里选择一个深入学习,需要能做单元测试,需要了解记忆体易位设计模式等。

Mocha

Mocha是一款特性丰富的JavaScript测试框架,它可以运行在Node.js环境和浏览器环境中。它可以使得异步测试变得简单有趣。Mocha可以顺序执行测试,输出灵活且精准的报告,同时可以将未捕获的程序异常映射到正确的测试用例上。Mocha托管在Github上。

Mocha的特性

Mocha的Github仓库

下载

Mocha可以通过多种方式下载获得

npm下载

1
2
3
4
5
// 全局下载
npm install mocha --global // npm i mocha -g

// 项目依赖
npm install mocha --save-dev // npm i mocha -D

Bower下载

1
bower install mocha

CDN

CDNjs地址

例子

全局安装Mocha

1
npm install mocha -g

创建项目test

1
mkdir test

初始化Node项目

1
2
// 注意test脚本填写mocha
npm init

本地安装Mocha

1
2
// 安装为项目依赖
npm install mocha -D

根目录创建test.js

1
touch test.js

编写测试用例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// test.js

var assert = require('assert');

describe('Array', function (argument) {
describe('#indexOf', function () {
it('should return -1 when the value is not present', function () {
assert.equal(-1, [1, 2, 3].indexOf(4));
});
});
});

describe('Math', function () {

it('should test if 3 * 3 = 9', function () {
assert.equal(9, 3 * 3);
});

it('should test if (3 - 4) * 8 = -8', function () {
assert.equal(-8, (3 - 4) * 8);
});

it('should test if 1 + 2 = 2', function () {
assert.equal(2, 1 + 2);
});
});

运行测试

1
npm test

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
#indexOf
√ should return -1 when the value is not present

Math
√ should test if 3 * 3 = 9
√ should test if (3 - 4) * 8 = -8
1) should test if 1 + 2 = 2


3 passing (27ms)
1 failing

1) Math
should test if 1 + 2 = 2:

AssertionError [ERR_ASSERTION]: 2 == 3
+ expected - actual

-2
+3

讲解

因为Mocha本身只是测试框架,所以使用它我们还需要引入断言库,本利中我们引入了Nodejs的内置断言库assert

我们编写了4个简单的测试用例。用到了Mocha的如下API。

describe

describe表示测试分组,我们可以根据需求进行有序的分组,方便有组织地查看测试结果。分组可以无限深度地嵌套。

1
describle('GroupName', function () {})

it

it表示一个测试用例,我们可以根据自己的测试需求编写测试用例。最终运行测试脚本会返回测试用例是否通过。在terminal中我们可以根据测试用例前面是否有来判断。如果没有通过,会生成一个未通过测试用例的索引,可以查看下面更详细的关于未通过原因的描述。

1
it('should bla bl abla', function () {})

断言

断言即给与一个布尔值,真或者假,是或者非等。

Mocha可以很方便地与各种断言库进行集成。

常用断言库有:

  • should.js
  • better-assert
  • expect.js
  • unexpected
  • chai

参考资料

Mochajs官方文档

有钱,任性!!!