前端测试的意义
假如要重构一个老前端框架,并根据其开发一个向后兼容的新框架。此时老框架针对其内部API函数,写了充分的单侧用例。在开发新框架时,直接运行老前端框架的单侧用例,如果所有测试用例都通过,则可快速保证内部api的一致性,快速验证所有功能。
- 保障代码质量和功能的实现的完整度
- 提升开发效率,提前发现和定位bug
- 便于项目维护,后续重构也能快速测试保证功能正常。
主流测试工具比较
框架 | 断言 | 仿真 | 快照 | 异步测试 |
---|---|---|---|---|
Mocha | 默认不支持,可配置 | 默认不支持,可配置 | 默认不支持,可配置 | 友好 |
Ava | 默认支持 | 不支持,需第三方配置 | 默认支持 | 友好 |
Jasmine | 默认支持 | 默认支持 | 默认支持 | 不友好 |
Jest | 默认支持 | 默认支持 | 默认支持 | 友好 |
Karma | 不支持,需第三方配置 | 不支持,需第三方配置 | 不支持,需第三方配置 | 不支持,需第三方配置 |
Mocha
- Mocha 是生态最好,使用最广泛的单测框架,但是他需要较多的配置来实现它的高扩展性。
Ava
- Ava 是更轻量高效简单的单测框架,但是自身不够稳定,并发运行文件多的时候会撑爆 CPU。
Jasmine
- Jasmine 是单测框架的“元老”,开箱即用,但是异步测试支持较弱。
Jest
- Jest 基于 Jasmine, 做了大量修改并添加了很多特性,同样开箱即用,但异步测试支持良好。
Karma
- Karma 能在真实的浏览器中测试,强大适配器,可配置其他单测框架,一般会配合 Mocha 或 Jasmine 等一起使用。
每个框架都有自己的优缺点,没有最好的框架,只有最适合的框架。Augular 的默认测试框架就是 Karma + Jasmine,Egg默认测试框架是Mocha,而 React 的默认测试框架是 Jest。node测试框架因为egg内置Mocha,因此不额外引入jest。 Jest 被各种 React 应用推荐和使用。它基于 Jasmine,至今已经做了大量修改并添加了很多特性,同样也是开箱即用,支持断言,仿真,快照等。Create React App 新建的项目就会默认配置 Jest,我们基本不用做太多改造,就可以直接使用。
单元测试
node单元测试