前端单元测试(Unit Testing)整理

是什么

wiki: 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

为什么

正确性: 测试可以验证代码的正确性,在上线前做到心里有底;
自动化: 通过编写测试用例,可以做到一次编写,多次运行;
解释性: 测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些 API。其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途径,有时比文档说明更清晰;
保证重构: 互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎么才能保证重构后代码的质量呢?有测试用例做后盾,就可以大胆的进行重构;
简化集成: 单元测试可以减少单元自身的不确定性,当单元集成在一起测试可已更加容易;

怎么做

我要测什么: 函数运行流程(函数是否如预期被调用)、校验参数(某函数接收的参数和预期是否一致)、校验返回值(函数应该返回什么)

工具

断言库: chai

TDD: assert

BDD: expert、should

测试框架: mocha

测试覆盖率: istanbul

测试运行器: karma

mock库: sinon

原则

  1. 测试用例需要覆盖所有分支;
  2. 除了必要的正确逻辑分支,针对 if else、switch、&&、|| 等的逻辑判断也都需要进行测试,以保证函数所可能产生的行为能如预期。
  3. 尽可能将被测试的代码与其他代码进行隔离,明确测试主逻辑,外部依赖使用 mock、stub 等替代。
  4. 凡是非本项目开发的代码,都可以认为是第三方代码。
  5. 对于使用的第三方工具库,我们是在信任它的基础上进行使用,既然选择信任,就没有测试它的必要,就算出了问题也是提供工具库的团队的问题。
  6. 针对调用接口的函数,或者其他一些不稳定变量,当对其进行合理的 mock/stub,以保证不会因为其的不稳定因素导致测试失败。即将非纯函数转化为纯函数。
  7. 一次只测一个单元。
  8. 如果有两个函数 A、B,A 调用了 B,那么我们在测试A的时候应该 stub 掉 B,这样能保证测试失败的时候,准确的找到错误的原因。反之,可能是B方法出了问题,导致A的测试失败了,测试结果就会有误导性。
  9. 有些项目中,测试代码是先于开发代码完成的。当我们想测试 A 的时候,可能 B 还没有实现,这个时候,也是需要 stub 掉 B。

建议

  1. 测试先行(TDD),定输入输出,定默认值;
  2. 用例的描述要符合用例的目的;
  3. 测试用例具有可重复执行的能力;
  4. 测试用例避免依赖或影响其他用例;
  5. 业务变动时及时更新用例;
  6. 合理使用 describe 分组,合理使用 before、beforeEach、arfter 等钩子,减少代码复杂度;

你可能感兴趣的:(前端开发)