本文主要是介绍基于React+Ant Design(如下用Antd表示Ant Design)的项目,在对于本身封装的,或者基于Antd封装的公共组件的自动化测试技术的选型和实践。html
当前前端项目愈来愈大,业务逻辑日益繁杂,协同开发的同事也愈来愈多,迭代频繁,许多页面有一些类似的功能,会复用一些组件,这些组件被剥离出来,通常放在component
文件夹下,你们共同维护,这时会出现一些常见问题:前端
目前前端总体的测试框架较为经常使用的有:react
源自Facebook,Jest 的一个理念是提供一套完整集成的 “零配置” 测试体验。app
仅仅是测试运行器,虽然灵活,但须要本身配置不少东西。框架
综合目前市面上的轮子,咱们技术选型为Jest+Enzymedom
例子是一个基于Antd二次封装的单选年的日期选择器,以下演示:函数
代码结构以下性能
其中测试相关的文件,在__test__中,后缀名为xxx.test.js的文件,在运行测试时会自动执行,__snapshots__为自动生成的页面快照。单元测试
这里能够首先简单的看一下,Jest+Enzyme的基本语法:测试
Jest的API更多着力于定义测试、断言、mock库
Enzyme的API更多着重于渲染react组件和从dom树种检索指定的节点
具体的写法,index.test.js文件内容以下:
import React, { PureComponent } from 'react'; import { mount, ReactWrapper, render } from 'enzyme'; import YearPicker from '..'; import moment from 'moment'; class YearPickerDemo extends React.Component { state = { cleared: false, value: moment().format('YYYY'), }; render() { return ( <YearPicker showTime format="YYYY" onChange={this.onChange} defaultValue={moment('2015/01/01', 'YYYY')} /> ); } } describe('DatePicker', () => { it('default value', () => { const wrapper = mount(<YearPickerDemo/>); expect(wrapper.find('.ant-calendar-picker-input').getDOMNode().value).toBe('2015'); }); it('clear value', () => { const wrapper = mount(<YearPickerDemo/>); wrapper.find('.ant-calendar-picker-clear').hostNodes().simulate('click'); expect(wrapper.find('.ant-calendar-picker-input').getDOMNode().value).toBe(''); }); it('set value in calendar', () => { const wrapper = mount(<YearPickerDemo/>); wrapper.find('.ant-calendar-picker-input').simulate('click'); const triggerWrapper = mount(wrapper.find('Trigger').instance().getComponent()); triggerWrapper.find('[title="2018"]').simulate('click'); expect(wrapper.find('.ant-calendar-picker-input').getDOMNode().value).toBe('2018'); }); });
这里定义了3个测试内容