多进程下的测试覆盖率

488 查看

多进程下的测试覆盖率

单元测试在 Node.js 项目开发中的重要性就不言而喻了,项目一旦稍微大起来了就经常出现拆东墙补西墙的情况。这边修复了一个 bug,那边又不知道什么时候产生了一个新的 bug,越到后面没有经过完整的测试都不敢随便发布。

代码覆盖率

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

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

目前在 Node.js 开发中比较流行的测试覆盖率工具是 Istanbul。

Yet another JS code coverage tool that computes statement, line, function and branch coverage with module loader hooks to transparently add coverage when running tests. Supports all JS coverage use cases including unit tests, server side functional tests and browser tests. Built for scale.

Istanbul 不但可以统计到整个项目的代码覆盖率,还会生成一份漂亮的覆盖率报告,准确的标记出哪些代码没有被覆盖到。

平常我们写的 JS 测试用例大部分都是单进程的场景,下面我们来看一个多进程项目的测试情况又是怎么样的呢?

多进程 demo

先写一个简单的 demo,使用 Mocha 做单元测试,Istanbul 生成测试覆盖率。
下面是整个项目的目录结构。

master.js

worker.js