您的位置:首页 > 其它

mocha教程

2016-07-02 17:12 295 查看
本文为阅读博文http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 后  节选与整合而得

为什么要写单元测试

比如,现在我们随着代码日加冗余,之前为了赶项目,赶进度,弄得代码混乱不堪,想要重构,可是,难道我们想要每重构一小部分就去浏览器上查看功能是否受损,而且很有可能受损的时候也检查不出来吗?通过单元测试,我们可以简单的输入测试命令,就检查出重构是否破坏了我们代码的逻辑。其实单元测试就是书写出出我们程序的重要逻辑,然后每次进行测试就是检查这些逻辑是否被遵守,是否被破坏。

下载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 chai
chai有很多断言风格,expect,alert以及should,任选一种即可,本文使用的是expect风格
var expect = require('chai').expect;
只要没有断言抛出错误,则测试用例就算通过。

开始测试

同步测试

mocha命令后紧跟测试脚本的路径和文件名即可测试指定脚本。如当前add.js文件和add.test.js都在一个文件夹demo中,我们进入demo文件夹通过以下代码就可以执行测试add.test.js
mocha 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: