React组件单元测试
React官网推荐使用jest + React.addons.TestUtils进行单元测试。jest是单元测试的框架,React.addons.TestUtils是针对React相关的方法,二者结合在一起可以方面地进行React的单元测试。
###jest介绍
a. mock的原因
对于无法控制、操作为危险、耗时的、依赖于难于控制的行为,进行mock是非常必要的,例如异步获取数据,有时需要测试网络错误(http statusCode: 404),网络正常情况下就难于直接测试,此时mock就显示出来了。
b. mock的实现
c. jasmine里面的mock需要显示指定,而jest里面的mock是默认进行的,例如:
从上述代码可以看出,jest默认是对数据进行mock的。如果不需要对其进行mock,那么就可以使用:
使用步骤
1.1 添加新的依赖、jsx预处理、unmock module
// package.json
{
...
"script": {
"test": "jest"
},
"devDependencies": {
"react-tools": "^0.13.3",
"jest-cli": "^0.4.13"
},
"jest": {
"scriptPreprocessor": "./preprocessor.js",
"unmockedModulePathPatterns": ["./node_modules/react"]
}
}
1.2 jsx预处理
// preprocessor.js
var ReactTools = require('react-tools');
module.exports = {
process: function(src) {
return ReactTools.transform(src);
}
};
###使用心得
使用jest对React进行单元测试,该如何下手呢?可以从以下几个方面入手:
- 测试组件静态特征,以@mtfe/react-paginator为例
上述测试中,test1、test2分别用于测试,组件渲染后,渲染的结果是否符合预期,也就是页面是否在页面1、页码100
如上所述,通过测试mockFunction执行时的参数是否符合预期,可以得出该组件与外部交互是否正确。