1.文档说明
1.1. 前言
基于React+Ant Design(以下用Antd表示)的项目,在对于自己封装的,或者基于Antd封装的公共组件的自动化测试技术的选型和实践。
1.2. 适用范围
读者:公牛智能家居前端开发者。
1.3. 相关背景
随着前端项目越来越大,业务逻辑日益繁杂,协同开发的同事也越来越多,迭代频繁,许多页面有一些相似的功能,会复用一些组件,这些组件被剥离出来,一般放在component文件夹下,大家共同维护,这时会出现一些常见问题:
- 从代码层面看,我们必须保证当前组件的质量,即当前业务的正常使用
- 在新需求下,旧组件如果能满足新需求50%以上的功能,应当升级旧组件满足新需求,同时兼容旧业务
- 除该组件Owner之外第二人,在修改组件的过程中,避免因为对代码的不熟悉,改出BUG
- 一个组件多个页面复用,修改后的测试回归任务重
1.4. 单元测试的好处 - 测试用例代码跟项目代码完全分离,但是能检验当前组件的质量、健壮性,保证业务能够正常使用
- 降低项目多处使用的公共组件修改后,测试回归任务重(改一处测多处)的问题
- 减少不必要的console.log或者debug,提升维护体验
- 对开发人员来说,写测试用例可以适量提升对代码实现的理解
1.5. 为何选用jest
*方便的异步测试
*snapshot功能
*集成断言库,不许要引用其他第三方库
*对React天生支持
1.6. React项目单元测试框架Jest简介
- 源自Facebook,Jest的一个理念是提供一套完整集成的零配置测试体验,开箱即用。
- 包含单元测试Mocha,chai,jsdom,sinon,mock等功能
- 内置代码覆盖率报告
- 可以与TypeScript一同使用
1.7. jest的断言
jest针对为实现某些业务逻辑而封装的函数,设定多种可能的输入,判断是否准确地返回了期望值
expect({a:1}).toBe({a:1})//判断两个对象是否相等
expect(1).not.toBe(2)//判断不等
expect(n).toBeNull(); //判断是否为null
expect(n).toBeUndefined(); //判断是否为undefined
expect(n).toBeDefined(); //判断结果与toBeUndefined相反
expect(n).toBeTruthy(); //判断结果为true
expect(n).toBeFalsy(); //判断结果为false
expect(value).toBeGreaterThan(3); //大于3
expect(value).toBeGreaterThanOrEqual(3.5); //大于等于3.5
expect(value).toBeLessThan(5); //小于5
expect(value)