一个具备丰富特性的javascript 测试框架,支持多种断言库,异步代码测试等,不只可运行在node.js 环境中还能够运行在浏览器中。javascript
// 全局安装 npm install -global mocha
// 在项目中安装 npm install --save-dev mocha
//mocha-to-go | package.json | +---node_modules | +---src | sum.js | \---test sum.test.js
// 求函数全部参数的和 module.exports = sum = function () { let args = Array.from(arguments); let sum = 0; sum = args.reduce((s, x) => { return s +=x }); return sum; }
mocha 支持多种断言库,好比should.js 、expect.js 、chai.js 等,这里以chai.js 为例。选择chai.js 的Expect风格的断言,它是行为驱动开发(BDD)断言的一种,接近于天然语言,容易理解。可运行在全部的浏览器中和node.js中java
先安装断言库chai.jsnode
npm install chai --save-dev
const sum = require('../src/sum.js'); const expect = require('chai').expect; describe('测试 sum(1,2)', function () { it('sum(1+2) 应该等于 3', function () { expect(sum(1,2)).to.be.equal(3); }); });
测试脚本一般包含多个describe块,每一个块都含有一个it块,
describe(testName, exceFunc)
describe 第一个参数是这个测试过程的名称,第二个参数应该是一个函数,它包含了咱们要测试的内容,也就是咱们要执行的过程。
it 是测试用例,表示一个单独的测试,是测试的最小单位。它是一个函数。第一个参数是测试用例的名称("1 加 1 应该等于 2")
,第二个参数是一个实际执行的函数。git
这里我在package.json 中声明了执行脚本github
"scripts": { "test": "mocha ./test/sum.test.js" }
也能够在项目目录直接执行npm
mocha ./test/sum.test.js
运行结果如图:json
Mocha中测试异步代码比较简单,只须要在测试用例结束时调用一下回调函数便可,一般回调函数写做done(),这样、Mocha就能获知这时一个异步函数,回调时才认为测试结束。promise
新建async.js,这里GET一个存在的json文件,来做为一个异步过程。浏览器
const request = require('request'); module.exports = asyncProc = function (callback) { request('https://github.com/Will233/koa-template/blob/master/mock/data.json',function (err, res, body) { callback(err, res, body) }); }
测试脚本框架
const expect = require('chai').expect; const request = require('request'); const asyncProc = require('../src/async.js'); describe('测试异步过程', function () { it('发送异步请求, response statusCode == 200', function (done){ asyncProc(function (err, res, body) { expect(res.statusCode).to.be.equal(200) done() }) }); });
mocha ./test/async.test.js
运行结果以下:
发现报错了。这里对异步代码进行测试时须要注意一点,Mocha默认一个单元测试最多执行2000ms,超时会报错。可在执行的时候用-t
或--timeout
指定超时阈值。
提升超时时间:
mocha -t 5000 ./test/async.test.js
运行结果以下:
Mocha 一样支持了对返回promise的异步代码进行测试。
咱们改造一下上面请求的代码,使其返回promise。
// async.js const asyncPromise = function () { return new Promise(function (resolve, reject) { request('https://github.com/Will233/koa-template/blob/master/mock/data.json',function (err, res, body) { if (err) { reject(err) } else { resolve(res) } }); }); }
编写测试用例:
describe('测试异步过程 Promise', function () { it('发送异步请求, response statusCode == 200', function (){ return asyncPromise().then(function (res) { expect(res.statusCode).to.be.equal(200); }); }); });
运行结果以下:
Mocha 做为一个强大的测试框架,还有不少特性。之后慢慢了解咯。