mocha教程
2016-07-02 17:12
295 查看
本文为阅读博文http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 后 节选与整合而得
现在,对这个函数进行测试,我们测试的脚本名通常与要测试得文件同名,但后缀名为.test.js(表示测试)或者.spec.js(表示规格)
测试套件。表示一组相关的测试,由一个或多个测试用例组成。通过describe块来表示。
测试用例。测试代码的最小单位。通过it块来表示
断言。用来判断源码的实际执行结果与预期是否一致,若不一致则抛出错误。react并没有断言库,需要自己引入。断言库有很多,本文使用的是chai,同样需要下载
mocha默认的是执行当前文件夹下的test文件夹中的代码,所以一般测试代码都直接写在test文件夹下,这样我们只需要以下指令就可以测试test文件夹下第一层的所有测试文件了
在异步测试中,必须向当前测试用例中传入done参数,并且在测试结束时调用该函数,告诉mocha测试结束了。不然mocha会一直等到测试超时并且报错。以下为异步测试的实例
由于以上异步测试必定用时超过2000ms,于是我们通过指令来调整mocha的测试用例限时为5000ms,指令如下
为什么要写单元测试
比如,现在我们随着代码日加冗余,之前为了赶项目,赶进度,弄得代码混乱不堪,想要重构,可是,难道我们想要每重构一小部分就去浏览器上查看功能是否受损,而且很有可能受损的时候也检查不出来吗?通过单元测试,我们可以简单的输入测试命令,就检查出重构是否破坏了我们代码的逻辑。其实单元测试就是书写出出我们程序的重要逻辑,然后每次进行测试就是检查这些逻辑是否被遵守,是否被破坏。下载mocha
通过npm 下载npm install -g mocha//全局安装,这样不只在当前目录下,在其他目录下也可以直接使用mocha咯
下载断言插件 本文使用的是chai
<pre name="code" class="plain">npm install chai
测试脚本的写法
首先,要测试,得有要测试得东西呀,我们先写一个add函数// add.js function add(x, y) { return x + y; } module.exports = add;
现在,对这个函数进行测试,我们测试的脚本名通常与要测试得文件同名,但后缀名为.test.js(表示测试)或者.spec.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); }); });结合上面这段测试代码我们来说下,在mocha中,一段测试代码由这些内容构成。
测试套件。表示一组相关的测试,由一个或多个测试用例组成。通过describe块来表示。
测试用例。测试代码的最小单位。通过it块来表示
断言。用来判断源码的实际执行结果与预期是否一致,若不一致则抛出错误。react并没有断言库,需要自己引入。断言库有很多,本文使用的是chai,同样需要下载
npm install chaichai有很多断言风格,expect,alert以及should,任选一种即可,本文使用的是expect风格
var expect = require('chai').expect;只要没有断言抛出错误,则测试用例就算通过。
开始测试
同步测试
mocha命令后紧跟测试脚本的路径和文件名即可测试指定脚本。如当前add.js文件和add.test.js都在一个文件夹demo中,我们进入demo文件夹通过以下代码就可以执行测试add.test.jsmocha add.test.js测试结果:
mocha默认的是执行当前文件夹下的test文件夹中的代码,所以一般测试代码都直接写在test文件夹下,这样我们只需要以下指令就可以测试test文件夹下第一层的所有测试文件了
mocha而若我们想运行不只第一层的js代码,而是所有代码 包括test的子文件夹下的js代码,则通过以下指令
mocha --recursive
异步测试
mocha默认每个测试用例用时最多2000ms,若超过该时间测试用例仍然未结束,则报错。在异步测试中,必须向当前测试用例中传入done参数,并且在测试结束时调用该函数,告诉mocha测试结束了。不然mocha会一直等到测试超时并且报错。以下为异步测试的实例
var expect = require('chai').expect;describe('asyn', function () {
var a = false;
it('asyn', function(done) {
var f = function() {
a = true;
expect(a).to.be.equal(true);
done();
};
setTimeout(f, 4000);
});
})
由于以上异步测试必定用时超过2000ms,于是我们通过指令来调整mocha的测试用例限时为5000ms,指令如下
$ mocha -t 5000 add.test.js
相关文章推荐
- Metasploit Framework 总结
- C++中explicit关键字的使用
- python 序列类型的操作符
- [Learning OpenCV入门3] OpenCV数据结构及core组件
- block没那么难 block的实现(一)
- Python爬虫抓取动态数据
- IOS内购流程(图片)
- mac上安装android studio出现Error:compileSdkVersion android-x requires compiling with JDK 7问题
- 矩阵快速幂模板
- RHCA学习笔记:RH442-Unit5 队列原理
- maven 构建项目时出错 “Dynamic Web Module 3.1 requires Java 1.7 or newer” in Eclipse
- Spring MVC 使用Servlet原生API作为参数
- TCP的超时与重传
- Java-类库-Guava
- Jam的计数法(C++)
- static用法作用
- iOS8设置NavigationBar颜色和BackButtonItem颜色
- RHCA学习笔记:RH442-Unit8进程与调度
- android socket
- Android多媒体功能的实现上(音频,视频,相机,录音)