单元测试覆盖率

测试的时候,我们常常关心,是否所有代码都测试到了。 这个指标就叫做"代码覆盖率"(code coverage)。

它有四个测量维度:

  • 行覆盖率(line coverage):是否每一行都执行了?
  • 函数覆盖率(function coverage):是否每个函数都调用了?
  • 分支覆盖率(branch coverage):是否每个if代码块都执行了?
  • 语句覆盖率(statement coverage):是否每个语句都执行了?

常用的前端js测试覆盖率框架: istanbul

我们代码使用ES6来编写的,使用babel来转码,所以选择了另一个专门针对es6的babel转码工具 isparta

安装:

  $ npm install --save-dev isparta

使用:

   babel-node node_modules/isparta/bin/isparta cover --report text --report html node_modules/mocha/bin/_mocha -- --reporter dot

examples:

package.json -> script中添加:

"test": "NODE_ENV=test mocha --recursive --compilers js:babel-core/register --require ./test/setup.js",
"test-cov": "babel-node ./node_modules/isparta/bin/isparta cover --report text --report html ./node_modules/mocha/bin/_mocha -- --reporter dot  --require ./test/setup.js"

单独执行test: npm run test 执行测试和覆盖率: npm run test-cov

生成报告

isparta使用istanbul来生成报告,所以参数也是istabul的参数: --report htm/json/lcov/cobertura/clover/teamcity/text-lcov/json-summary/text-summary