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