# 前端测试覆盖率

# 背景

覆盖率是度量测试完整性的一个手段,也是测试有效性的一个依据。当一个迭代版本完成手工测试后,如果可以通过分析本次迭代变更代码的覆盖率来评估前期的测试用例设计是否完善,开发提交的改动 QA 这边是否均了解全面,开发代码是否存在冗余。从而更好的进行补充测试,提升本次上线的信心,降低上线即故障的频次。
覆盖率主要有四个准则:
行覆盖率(Line Coverag):是否每一行都执行了
函数覆盖率(Function Coverage):是否每个函数都调用了
分支覆盖率(Branch Coverage):是否每个分支都执行了
语句/指令/声明 覆盖率(Statement Coverage):是否每个语句都执行了
对每个 statement、function、branch 都插入一段计数代码,记录在一个全局对象中。

# 核心思路

  1. babel-plugin-istanbul 完成插桩
  2. istanbul-middleware 覆盖率数据管理 & 覆盖率报告 istanbul-middleware 主要通过内存来存储覆盖率数据
    function getCoverageObject() {
         /*jslint nomen: true */
         global.__coverage__ = global.__coverage__ || {};
         return global.__coverage__;
     }
    
  3. 小程序window对象补丁 window.coverage

需要覆盖的场景:多项目,多个分支,多环境的覆盖率分布统计
就需要改造istanbul-middleware,把数据落库