阿里云双十一优惠活动,点击链接进行购买: 一年仅需89元即可以购买服务器~。我个人服务器为2核4G配置,也更加推荐购买 2核4G三年799元 配置的服务器。
你可以跟着我的笔记 当我有一台服务器时,我做了什么 来开始维护服务器并搭建应用,将引导你使用 docker 和 k8s 搭建一个自己的服务器开发集群。

# 为你的 Node 应用添加测试用例

当新增一个新功能或迭代已有功能时,如何保证不会影响到旧功能的正常运作?

单元测试是提高代码质量的一个必要手段,也能够最大限度地减少对旧有功能的最大破坏。对于一些公共库,如 lodashkoareact 而言,它们对健壮性,代码质量有着更高的要求,单元测试则是必备条件了。

除了提高代码质量,单元测试还可以充当 文档 或者 示例 的功能,特别是对那些文档不齐及不见文档特性而言。

# BDD 与 TDD

测试分为两大流派,分别为

  1. BDD: Behavior Driven Development,行为驱动开发,先作实现,然后对实现做尽量完整的测试
  2. TDD: Test Driven Development,测试驱动开发,先写测试用例,根据测试用例驱动开发,对于开发细节有很好的把控

# 断言 | chai

function sum (a, b){
  return a + b;
}

假设项目中有一个函数 sum,我们要对它进行测试:

sum(1, 1) === 2

当然这种写法过于简单,当有更多个测试用例时也无法更直观地查看详情,于是有很多优秀的断言库支持:

  1. assert (opens new window): Node 原生支持的断言模块
  2. chai (opens new window) (6.7k star): 可支持浏览器及 Node 的断言库,支持 TDD 与 BDD
  3. should (opens new window) (2.8k star): 支持 BDD
  4. expect (opens new window) (2.1k star)

# 框架 | mocha

一个测试用例可以包含一个断言或多个断言,那如何组织多个测试用例呢?

通过框架,它可以对测试用例进行分组测试,并形成测试报告。常见的几种测试框架如下

  1. ava (opens new window) (17.7k)
  2. mocha (opens new window) (19.1k),著名框架 express 通过它来写测试
  3. jest (opens new window) (30.2k),多在浏览器环境中使用,如 react
  4. karma (opens new window) (11k),多在浏览器环境中使用,如 vue

这是一个使用 mochaassert 测试 Array.prototype.indexOf 的示例

const assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal([1, 2, 3].indexOf(4), -1);
    });
  });
});

这是通过 mocha 测试框架所形成的测试报告

$ ./node_modules/mocha/bin/mocha

  Array
    #indexOf()
      ✓ should return -1 when the value is not present


  1 passing (9ms)

# 测试覆盖率

  1. nyc (opens new window) (4.1k star)
  2. codecov (opens new window)
  CLS Session
    ✓ expect work
    ✓ expect scope return value
    ✓ expect work at async resource
    ✓ expect work at koa middleware


  4 passing (39ms)


=============================== Coverage summary ===============================
Statements   : 97.06% ( 33/34 )
Branches     : 62.5% ( 5/8 )
Functions    : 92.31% ( 12/13 )
Lines        : 97.06% ( 33/34 )
================================================================================

# API 测试

Last Updated: 4/5/2020, 8:15:55 AM