极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 为你的 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)

# 仅仅测试某一个 TestSuite

为了更有针对性的调试,仅需对某一个文件进行测试

# 测试覆盖率

  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 )
================================================================================
$ jest --coverage

# API 测试

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 7/21/2019, 11:25:08 AM