最近和台湾朋友聊天,跟他讲述了一些最近在做的项目中碰到的难点,询问一下他是如何解决此类问题的。
他给我推荐了一些技术,建议我可以了解一些,还说必须要学习单元测试。
所以趁着周末闲暇之际,学习一下Mocha测试框架。
起因
咨询的问题主要有如下3个:
如何实现2个不同域名页面的实时通信。
用户要求在后台操纵页面点击列表项,前台页面弹出对应项的新闻
页面定时器太多,可能存在使用不当的情况,导致内存溢出,页面崩溃。
工作和开发经验心得。
关于问题一,我咨询他除了用websocket
和短时间的定时器去轮询外,是否还有什么更好的方案。
诸如小型的聊天室,百度商桥,商务通类的基于web的即时通信软件,他们是如何实现双向实时通信的。
他给我推荐了一个方案野狗云。
野狗科技(北京)有限公司(简称:野狗)是安全可靠的实时通信云。野狗为企业和开发者提供了可编程的实时数据、音视频通信能力,以及短信服务,可以安全地构建丰富场景化的实时通信业务。
关于问题二,他给我推荐了Rx.js
,一种响应式编程的方案。
Rxjs提供了一种处理异步逻辑,数据流, 事件的方案,不过其学习曲线比Promise还要陡峭。
关于问题三,他告诉我需要学习BDD
(行为驱动开发)和TDD
(测试驱动开发),需要在Ng
,Vue
和React
框架里选择一个深入学习,需要能做单元测试,需要了解记忆体易位
,设计模式
等。
Mocha
Mocha是一款特性丰富的JavaScript测试框架,它可以运行在Node.js
环境和浏览器
环境中。它可以使得异步测试变得简单有趣。Mocha可以顺序执行测试,输出灵活且精准的报告,同时可以将未捕获的程序异常映射到正确的测试用例上。Mocha托管在Github上。
下载
Mocha可以通过多种方式下载获得
npm下载
1 | // 全局下载 |
Bower下载
1 | bower install mocha |
CDN
例子
全局安装Mocha
1 | npm install mocha -g |
创建项目test
1 | mkdir test |
初始化Node项目
1 | // 注意test脚本填写mocha |
本地安装Mocha
1 | // 安装为项目依赖 |
根目录创建test.js
1 | touch test.js |
编写测试用例
1 | // test.js |
运行测试
1 | npm test |
结果
1 | Array |
讲解
因为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