本博客简要介绍NodeJs如何进行单元测试
单元测试类型
- TDD:测试驱动开发
- TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD 是 XP(Extreme Programming)的核心实践。
- BDD:行为驱动开发
- 重点是通过与利益相关者的讨论取得对预期的软件行为的清醒认识。它通过用自然语言书写非程序员可读的测试用例扩展了测试驱动开发方法。行为驱动开发人员使用混合了领域中统一的语言的母语语言来描述他们的代码的目的。
Mocha
测试代码
- 主要函数
- describe:包含需要测试的样例
- done:测试完一个样例需要传递done类表明测试样例结束
- assert:判断样例是否正确
- 注意:describe可以嵌套
测试库函数
calc.js
exports.add = function(i, j) {
return i + j;
};
exports.mul = function(i, j) {
return i * j;
};
demo.js
var assert = require('assert');
var calc = require('./calc.js');
describe('Calculator Tests', function() {
describe('Addition Tests', function() {
it('returns 1 + 1 = 2', function(done) {
assert.equal(calc.add(1, 1), 2);
done();
});
it('returns 1 + -1 = 0', function(done) {
assert.equal(calc.add(1, -1), 0);
done();
});
});
describe('Multiplication Tests', function() {
it('returns 2 * 2 = 4', function(done) {
assert.equal(calc.mul(2, 2), 4);
done();
});
it('returns 0 * 4 = 4', function(done) {
assert.equal(calc.mul(2, 2), 4);
done();
});
});
});
cmd
mocha .\demo.js
最终结果
测试服务器
后续更新
Istanbul
测试覆盖率
覆盖率说明
- 语句覆盖(StatementCoverage):度量被测代码中每个可执行语句是否被执行到了
- 判定覆盖(DecisionCoverage):度量程序中每一个判定的分支是否都被测试到了
- 条件覆盖(ConditionCoverage):度量判定中的每个子表达式结果true和false是否被测试到了
- 路径覆盖(PathCoverage):度量了是否函数的每一个分支都被执行了
结合node使用
npm install -g mocha
npm install -g istanbul
npm install --save-dev mocha nyc
为了方便
在package.json中修改:
"scripts": {
"test": "mocha --reporter dot",
"coverage": "nyc --reporter html --reporter text npm test"
}
同时新建一个test文件夹,其中放置所有的测试文件,任意命名就行。
测试样例的正确率
npm test
测试代码的覆盖率
npm run coverage
最后生成一个coverage文件夹,其中包含测试结果的html:
且点击列表中的各项可以查看各个js文件的覆盖情况
参考
- TDD:
https://www.jianshu.com/p/62f16cd4fef3 - BDD: https://zh.wikipedia.org/wiki/%E8%A1%8C%E4%B8%BA%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91
- TDD与BDD
http://ilucas.me/2016/03/07/difference-between-tdd-and-bdd/ - NodeJs单元测试:
http://taobaofed.org/blog/2015/12/10/nodejs-unit-tests/ - Mocha:
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
https://gist.github.com/soheilhy/867f76feea7cab4f8a84 - 代码覆盖率
https://www.cnblogs.com/coderzh/archive/2009/03/29/1424344.html - Istanbul + Mocha:
https://blog.jpalardy.com/posts/mocha-and-istanbul-in-5-minute/
http://imweb.io/topic/584ba94d9be501ba17b10aa3