最近一直在做nodejs,而关于js的单元测试覆盖率网上资料比较少而且吧比较零散,我从网上找来一些资料整理一下分析给大家,希望大家可以少走弯路。
首先我是从windows环境下测试的,用到的工具有
mocha,一个js的测试工具,如果你是已经安装了npm包管理工具,那么直接 npm install mocha -g就可以了,你可以在任何路径使用mocha命令进行测试
should是一个还不错断言库(断言库就是一些使用习惯,实质没有不同),具体用法就直接上代码了。
同样npm install should即可下载should库
var Vehicle = (function () { function Vehicle(vType) { this.initCar(vType); this.distance = 100000; } Vehicle.prototype.initCar = function (vType) { switch(vType) { case "car": this.weight = 20; this.force = 20; break; case "van": this.weight = 60; this.force = 30; break; case "roadster": this.weight = 15; this.force = 30; break; default: this.weight = -1; this.force = -1; break; } }; Vehicle.prototype.getAcceleration = function () { return (this.force / this.weight); }; return Vehicle; })(); exports.Vehicle = Vehicle;
Mocha测试用例
var V = require("./Vehicle") var should = require("should"); describe("Vehicle", function () { describe("#getAcceleration", function () { it("should return an right result", function () { var vvv = new V.Vehicle("car"); vvv.getAcceleration().should.equal(1); }); it("should return an right result", function () { var vvv = new V.Vehicle("van"); vvv.getAcceleration().should.equal(0.5); }); it("should return an right result", function () { var vvv = new V.Vehicle("roadster"); vvv.getAcceleration().should.equal(2); }); }); });
OK全部通过了,下一步,下载测试覆盖率的工具jscoverage,在这里http://siliconforks.com/jscoverage/download.html选择一个windows版本下载,放到你的工作目录里
在这里说说jscoverage的原理就是把你的代码每一个逻辑路径都插入一个检查点,当你的代码运行到那个路径的时候会在计数器里加1,多次运行那段的代码便一直累加上去。
在后在你的工作目录运行 jscoverage ./src ./test --no-highlight 注意后面那个参数--no-highlight必须得加,否则后面mocha生成report时你会发现一团糟(不信你试试)
执行后,进入./test这个目录,你会发现插入检查覆盖代码生成后的js文件,还多出了jscoverage的js和html两个文件,这两个不用管,我们直接用mocha生成报告。
在cd ./test后,执行上面这行命令(如果你的mocha不带指定的文件名,他会把目录下的test子目录或目录下的test.js执行),如果执行成功,马上就会多出report.html这个文件
这里比较神奇的是,mocha会自动识别这个生成后的js文件(竟然知道能检查覆盖率)并生成html文档,对于这一点我一直不解....求高手解答
打开report.html,出来了。。。。。覆盖率91%
这里是windows下的,明天写一个linux下使用jscoverage和使用mocha的报告