本文主要是介绍基于React+Ant Design(以下用Antd表示Ant Design)的项目,在对于自己封装的,或者基于Antd封装的公共组件的自动化测试技术的选型和实践。
当前前端项目越来越大,业务逻辑日益繁杂,协同开发的同事也越来越多,迭代频繁,许多页面有一些相似的功能,会复用一些组件,这些组件被剥离出来,一般放在component
文件夹下,大家共同维护,这时会出现一些常见问题:
目前前端整体的测试框架较为常用的有:
源自Facebook,Jest 的一个理念是提供一套完整集成的 “零配置” 测试体验。
仅仅是测试运行器,虽然灵活,但需要自己配置很多东西。
综合目前市面上的轮子,我们技术选型为Jest+Enzyme
例子是一个基于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个测试内容