react-native使用jest、enzyme进行单元测试
2018-06-24 01:21:09来源:未知 阅读 ()
在网上找了好久针对react-native的测试方法,但是没有找到靠谱的方式。要么很浅只是跑了一下官方的例子,要么就是版本有点老旧,照着无法进行。jest提供的react-native例子很少,而enzyme提供的react-native-mock库也是各种报错,让人很是绝望。于是乎在搜索到的信息指引下,经过自己的尝试,我总结出了下面的测试方法,但是不是很满意,如果哪位大神有更好的方式,恳请留个言指明一下方向。
react官方内置了jest作为单元测试的工具,再搭配上enzyme就能完美地开展测试工作。但是当测试的对象变成react-native时,测试工作就变得异常艰难。艰难的地方主要有以下几点:
jest.mock('react-native-go', ()=>{
return {
to: ()=>{}
}
});
"devDependencies": {
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.1",
"jest": "^21.2.1",
"react-dom": "^16.2.0"
},
2、编写.babelrc
{
"presets": ["react-native"]
}
3、jest配置
// package.json
"scripts": {
"test": "jest"
},
"jest": {
"preset": "react-native"
}
先写一个我要测试的组件
import React, {Component} from 'react';
import {
View
} from 'react-native';
//工具方法包含获取数据请求send
let Core = require('./core');
export default class AboutUsPage extends Component<{}>{
constructor(props){
super(props);
if(typeof this.props.getThis === 'function'){
this.props.getThis.call(this);
if (this.props.testCore) {
Core = this.props.testCore;
}
}
}
async componentWillMount(){
this.setState({
name: await this.firstStep()
})
}
async firstStep(){
return await this.secondStep();
}
async secondStep(){
return await Core.send('/getData');
}
render(){
return (
<View></View>
)
}
}
core文件
let Core = {
async send() {//请求异步数据,返回promise
...
}
};
module.exports = Core;
testCore文件,暴露两个函数,一个send用以调用数据,一个setSendData用以设置要返回的数据
"use strict";
let caches = {
};
let currentRequest = {};
let Core = {
async setSendData(key, status, data) {
caches[key] = {
status,
data
};
},
async send(key){
let res = caches[key];
if(res.status){
return Promise.resolve(res.data);
}else{
return Promise.reject(res.data);
}
}
};
module.exports = Core;
test.js测试文件
'use strict';
import React from 'react';
import AboutUsPage from './AboutUsPage';
import {configure, shallow} from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import testCore from './test.core';
configure({ adapter: new Adapter() });
testCore.setSendData('getData', true, 'aaa');
describe('AboutUsPage', () => {
let component;
let wrapper;
wrapper = shallow(<AboutUsPage getThis={function(){component=this;}} testCore={testCore}/>);
wrapper.setState({
name: 'tom'
});
it('renders correctly', async () => {
await component.componentWillMount();
expect(wrapper.state().name).toBe('aaa');
});
});
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于jQuery UI 使用心得及技巧 2020-03-29
- js中去掉字串左右空格 2020-03-20
- Js中如何使用sort() 2020-03-18
- 使用JS在浏览器中判断当前网络连接状态的几种方法 2020-03-12
- 在JavaScript中尽可能使用局部变量的原因 2020-03-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
