1 配置环境
新建工程 mocha-demo, 首先生成npm工程,运行命令
npm init
作为项目的依赖进行安装
$ npm install --save-dev mocha
编写了一个hello.js
,并且输出一个简单的求和函数:
// hello.js
module.exports = function (...rest) {
var sum = 0;
for (let n of rest) {
sum += n;
}
return sum;
};
这个函数非常简单,就是对输入的任意参数求和并返回结果。
如果我们想对这个函数进行测试,可以写一个test.js
,然后使用Node.js提供的assert模块进行断言:
// test.js
const assert = require('assert');
const sum = require('./hello');
assert.strictEqual(sum(), 0);
assert.strictEqual(sum(1), 1);
assert.strictEqual(sum(1, 2), 3);
assert.strictEqual(sum(1, 2, 3), 6);
在的package.json中设置一个测试脚本:
"scripts": {
"test": "mocha"
}
然后运行:
npm test
或者运行
npm test 测试文件名.js
assert
模块非常简单,它断言一个表达式为true。如果断言失败,就抛出Error。可以在Node.js文档中查看assert模块的所有API。
参考资料: https://nodejs.org/dist/latest/docs/api/assert.html
单独写一个test.js的缺点是没法自动运行测试,而且,如果第一个assert报错,后面的测试也执行不了了。
如果有很多测试需要运行,就必须把这些测试全部组织起来,然后统一执行,并且得到执行结果。这就是我们为什么要用mocha来编写并运行测试。
2 编写配置文件
编写 hello-test.js
const assert = require('assert');
const sum = require('./hello');
describe('#hello.js', () => {
describe('#sum()', () => {
it('sum() should return 0', () => {
assert.strictEqual(sum(), 0);
});
it('sum(1) should return 1', () => {
assert.strictEqual(sum(1), 1);
});
it('sum(1, 2) should return 3', () => {
assert.strictEqual(sum(1, 2), 3);
});
it('sum(1, 2, 3) should return 6', () => {
assert.strictEqual(sum(1, 2, 3), 6);
});
});
});
这里我们使用mocha默认的BDD-style的测试。describe可以任意嵌套,以便把相关测试看成一组测试。
每个it("name", function() {...})就代表一个测试。例如,为了测试sum(1, 2),我们这样写:
it('sum(1, 2) should return 3', () => {
assert.strictEqual(sum(1, 2), 3);
});
编写测试的原则是,一次只测一种情况,且测试代码要非常简单。我们编写多个测试来分别测试不同的输入,并使用assert判断输出是否是我们所期望的。
运行测试
下一步,我们就可以用mocha运行测试了。运行命令
npm test hello-test.js
关于作者
王硕,网名信平,十多年软件开发经验,业余架构师,精通Java/Python/Go等,喜欢研究技术,著有《PyQt 5 快速开发与实战》《Python 3.* 全栈开发》,多个业余开源项目托管在GitHub上,欢迎微博交流。