单元测试,对于控制项目代码质量,保障线上版本的安全性和稳定性,节省回归测试成本和降低风险,都有着非常重要的作用。
代码覆盖度(Code coverage) 是衡量单元测试有效程度的一个重要指标。
代码覆盖度也是持续集成质量把控的一个环节。coveralls 是一个非常好的代码覆盖度检查平台,它可以和我们的 github repo 以及 Travis CI 无缝集成在一起。
结合 node-coveralls,有很多 Node.js 工具可以生成并发送代码覆盖度报告(Code coverage report),相关的工具包括 Mocha、Nodeunit、Blanke.js、JSCoverage、Poncho、Lab 等等。
在本文中,我将介绍如何使用 Babel 来开发插件,将 js 原文件编译为可被 Mocha 等工具生成代码覆盖度报告的测试文件。使用这个插件,可以让 coveralls 相关的工具很好地支持对最新的 ES6+ 代码生成代码覆盖度报告。
长文预警:本文内容很长,我先介绍怎样使用相关工具生成代码覆盖度数据,如果对 coveralls、lcov data 已经有所了解,可以跳过这一部分,直接看 Babel 插件的部分。
coveralls 与 lcov data
coveralls 接收一个 lcov data 文件,它用这个文件来计算代码覆盖度。一个 lcov data 文件格式看起来如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
SF:file1.js DA:3,1 DA:4,19 DA:5,19 DA:6,19 DA:9,1 …… DA:115,2 DA:118,2 DA:121,1 end_of_record SF:file2.js DA:1,1 DA:2,1 …… end_of_record |
这个文件格式还是比较简单的, SF:
与 end_of_record
之间表示文件的覆盖数据,格式为: DA:行号,执行次数
,例如:DA:5,19
表示代码的第 5 行被执行了 19 次。
有了 lcov data 文件,我们就可以通过 node-coveralls 与 Travis CI 集成,得到代码覆盖率结果。
.travis.yml 大致的内容如下:
1 2 3 4 5 6 7 |
language: node_js node_js: - "4" sudo: false script: - "npm run test-cov" after_script: "npm install coveralls |
如果不知道怎样集成 Travis CI 与 coveralls,可以参考这篇文章。
lcov data 文件
前面说过有很多工具可以配合单元测试工具生成 lcov data 文件。
喜欢用 Mocha 来做单元测试的同学,可以简单用 mocha-lcov-reporter 来生成 lcov data 文件:
安装 mocha 和 mocha-lcov-reporter:
1 2 |
$ npm install mocha --save-dev $ npm install mocha-lcov-reporter --save-dev |
安装一个断言库,我喜欢用 chai:
1 |
$ npm install chai --save-dev |
写一段 js 文件和测试代码:
1 2 3 4 5 6 7 8 9 10 |
//src/person.js function Person(name){ this.name = name; } Person.prototype.greeting = function(){ console.log("hello", this.name); } module.exports = Person; |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//test/test.js var Person = require("../src/person"); var chai = require("chai"); describe("test", function(){ var expect = chai.expect; it("person name", function(){ var akira = new Person("akira"); coverage">代码覆盖度(Code coverage) 是衡量单元测试有效程度的一个重要指标。
代码覆盖度也是持续集成质量把控的一个环节。coveralls 是一个非常好的代码覆盖度检查平台,它可以和我们的 github repo 以及 Travis CI 无缝集成在一起。 结合 node-coveralls,有很多 Node.js 工具可以生成并发送代码覆盖度报告(Code coverage report),相关的工具包括 Mocha、Nodeunit、Blanke.js、JSCoverage、Poncho、Lab 等等。 在本文中,我将介绍如何使用 Babel 来开发插件,将 js 原文件编译为可被 Mocha 等工具生成代码覆盖度报告的测试文件。使用这个插件,可以让 coveralls 相关的工具很好地支持对最新的 ES6+ 代码生成代码覆盖度报告。 长文预警:本文内容很长,我先介绍怎样使用相关工具生成代码覆盖度数据,如果对 coveralls、lcov data 已经有所了解,可以跳过这一部分,直接看 Babel 插件的部分。 coveralls 与 lcov datacoveralls 接收一个 lcov data 文件,它用这个文件来计算代码覆盖度。一个 lcov data 文件格式看起来如下:
这个文件格式还是比较简单的, 有了 lcov data 文件,我们就可以通过 node-coveralls 与 Travis CI 集成,得到代码覆盖率结果。 .travis.yml 大致的内容如下:
如果不知道怎样集成 Travis CI 与 coveralls,可以参考这篇文章。 lcov data 文件前面说过有很多工具可以配合单元测试工具生成 lcov data 文件。 喜欢用 Mocha 来做单元测试的同学,可以简单用 mocha-lcov-reporter 来生成 lcov data 文件: 安装 mocha 和 mocha-lcov-reporter:
安装一个断言库,我喜欢用 chai:
写一段 js 文件和测试代码:
|