浅学之单元测试
心情
世界这么大,我想去看看
了解单元测试
单元测试意义
单元测试是软件工程中的其中一个环节,具有十分重要的意义。 从代码开发者的角度来看,编写测试用例,利用测试框架创造环境执行,可以做到1次编写,多次测试的效果,在业务代码或许使用较少,对于高度模块化可复用的组件来说,单元测试可以提高。
常用框架
常见的框架有jest,Mocha,Jasmine(较老,但是国内用得比较少),当然,还有其他的,不过学习一二(jest,mocha)得以管中窥豹,便算得上满载而归了。
- jest
- facebook 坐庄
- 基于 Jasmine 至今已经做了大量修改添加了很多特性
- 开箱即用配置少,API简单
- 支持断言和仿真
- 支持快照测试
- 在隔离环境下测试
- 互动模式选择要测试的模块
- 优雅的测试覆盖率报告,基于Istanbul
- 智能并行测试(参考)
- 较新,社区不十分成熟
- 全局环境,比如 describe 不需要引入直接用
- 较多用于 React 项目(但广泛支持各种项目)
- Mocha
- 灵活(不包括断言和仿真,自己选对应工具)
- 流行的选择:chai,sinon
- 社区成熟用的人多,测试各种东西社区都有示例
- 需要较多配置
- 可以使用快照测试,但依然需要额外配置
- Jasmine
- 开箱即用(支持断言和仿真)
- 全局环境
- 比较'老',坑基本都有人踩过了
参考前端框架的对比
三者的特点:
- jest 是facebook 出的,比较新,集成了Mocha,chai,jsdom,sinon,配置较少,开箱即用,目前比较受欢迎
- mocha 可以将报告同步到github,社区成熟,配置较多
其他
- 基本用法
mocha
describe(string, function)
describe 块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("Array"),第二个参数是一个实际执行的函数。上面可以看到,describe 块可以嵌套使用
it(string, function)
所有的测试用例(it 块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。上面的例子中我们引入了 Chai 断言库的 expect API,(注释部分代码是 node 自带断言库 assert)。Chai 支持 expect, should, asset 三种形式的断言 API 。
mocha 运行命令
mocha + 路径入口 (没有指明则默认 test/test.js
难点
测试用例的编写。