单元测试的原则
- Redux的功能由众多函数组成,这些函数中不少依然是纯函数,测试一个根据输入返回输出的纯函数,要比测试一个包含很多状态的对象容易得多。
单元测试环境搭建
单元测试框架
- Mocha + Chai
- 在
create-react-app
创建的应用中自带了Jest库
使用npm run test
就会进入单元测试的界面 - Jest测试一个根据输入返回输出的纯函数,要比测试一个包含很多状态的对象容易得多
文件名以.test.js为后缀的代码文件;
存于__test__目录下的代码文件。
两种测试代码的组织方式
- 是在项目的根目录上创建一个名为test的目录,和存放功能代码的src目录并列,在test目录下建立和src对应子目录结构,每个单元测试文件都以.test.js后缀,就能够被Jest找到
功能代码在src/todo/actions.js文件中,对应的单元测试代码放在test/todo/actions.test.js文件中
缺点:在actions.test.js文件中导入被测试的功能代码,就需要一个很长的路径名 - 在每一个目录下创建__test__子目录,用于存放对应这个目录的单元测试
缺点:不整洁
单元测试代码组织
- 测试用例:it函数代表,it函数的第一个参数是一个字符串,代表的就是测试用例名称,第二参数是一个函数,包含的就是实际的测试用例过程
- 测试套件:一个测试套件由测试用例和其他测试套件构成
将多个it放到一个describe中的主要目的是为了重用共同的环境设置
- describe中有如下特殊函数可以帮助重用代码
□ beforeAll,在开始测试套件开始之前执行一次;
□ afterAll,在结束测试套件中所有测试用例之后执行一次;
□ beforeEach,每个测试用例在执行之前都执行一次;
□ afterEach,每个测试用例在执行之后都执行一次。
辅助工具
Enzyme
- 安装:
- Enzyme支持三种渲染方法
sinon.js
- 安装:
- 作用:模拟工具(例如模拟网络访问的结果)
redux-mock-store
- 安装:
- 作用:从测试角度并不需要action对象被派发到reducer中,只要能够检查action对象被派发就足够了