首页 网站首页 商业信息 方案 查看内容

多状态页面中的 mock 方案

网络营销 2023-3-4 13:32 7106人围观 方案

我们偶然辰会碰到一个营业页面存在很多个状态,甚至子状态,比如定单详情就是其中的典型,触及从定单建立到定单竣事,以及售后等流程。保护起来每个状态对应一份数据,虽然我们 QA 供给了数据机关平台,但机关一份对应状态的数据还是需要花费很多时候,而且串行流程一旦出错的话只能重新来一遍。

前期保护阶段也不轻易机关对应状态的数据,致使排查页面题目比力耗时。

别的一个题目就是重新熟悉营业的话本钱比力高,倘使有一个直观的页面可以看到页面款式会好很多。

以上就是设想一个多状态 mock 工具初衷,让开辟者在页面中间接挑选对应状态,便可以切换到对应页面。

技术选型

今朝转转 APP 测试包,webview 页面气泡浮层已经有两个了——客户端工具和 eruda,再多就乱套了,所以最好集成在现有的工具根本上。客户端部分功用我们打仗不到也不领会,在现有条件下只要 eruda 可用。

Eruda 是一个很强大的前端页面调试工具库,我们客户端 webview 也内置了,在测试包中可以很方便的借助 eruda 调试页面,观察日志。同时 eruda 也支持插件,经过插件来扩大 eruda 的功用。 我们的工具就基于 eruda 插件来实现。

实现结果预览:




插件预览图

整体流程以下:




插件流程

全部流程大要三个部分组成

  • 营业逻辑革新
  • Eruda 插件
  • mock 数据整理

营业逻辑革新

首先要实现这样一个计划焦点依靠于营业利用的请求库,以及能否可以对请求库停止点窜。

我们营业利用的基于 axios 的请求库,其表露了现实发送请求的 adapter 逻辑,我们可以基于 adapter 来实现接口方式的阻挡。




axios adapter

借助 axios-mock-adapter[1],可以很方便的实现我们的需求。

import { axiosInstance } from '@zz/fetch';
import MockAdapter from 'axios-mock-adapter';

export const mock = new MockAdapter(axiosInstance)

try {
// 借助 localstorage 实现 eruda 插件和 axios-mock-adapter 通讯
const mockReqConf = JSON.parse(localStorage.getItem('_mock_req'))
if (mockReqConf && mockReqConf.mockId) {
mock.onGet(api.getOrderDetail).reply(config => {
// console.log('mock api', api.getOrderDetail)
return axiosInstance.get('https://mockrepository.zhuanzhuan.com/orderdetail?mockId=' + mockReqConf.mockId)
})
}

mock.onAny()
.passThrough()

const isProduction = process.env.NODE_ENV === 'production'
if (isProduction || (mockReqConf && mockReqConf.mockId === '')) {
// sessionStorage 实现开关,假如没有此设置,就重置设备的 mock 阻挡
if (!sessionStorage.getItem('mock-adapter')) {
mock.restore()
}
}
} catch (error) {
console.log('mock adapter config error', error)
}

Eruda 插件

插件的目标是实现两个功用,一个是总开关,另一个是 mock 数据的展现和切换。

总开关借助 sessionStorage,webview 封闭 sessionStorage 数据断根,这样避免了一进入页面就是mock数据,避免忘记封闭以及频仍操纵,需要的时辰才翻开。

Mock 数据的展现设置在一个设置文件中,公司有同一的设置中心,基于携程 Apollo 实现。这个文件的感化是映照对应的状态和 mock 数据来历,来历是同一的,所以只用参数区分即可。

示例以下:

[
{
"id": "/order/detail",
"list": [
{
"title": "正向流程",
"list": [
{
"title": "下单待发货",
"id": "1-0-1"
},
{
"title": "寄卖下单",
"id": "1-1-0"
},
{
"title": "发货运输中",
"id": "1-2-0"
},
{
"title": "平台质检",
"id": "1-3-0"
}
]
},
{
"title": "逆向流程",
"list": [
{
"title": "申请退回-退回中",
"id": "2-3-2"
}
]
}
]
}
]

id 用于标识当前页面链接,能否有设置mock数据,所以也支持设置多个页面。

Eruda 插件的实现参考 eruda 官方文档。

Eruda 若何写插件[2] https://github.com/liriliri/eruda/blob/master/doc/PLUGIN.md
Eruda 工具库[3] https://licia.liriliri.io/docs_cn.html

Eruda 插件写法类比力像一个小的模板库,eruda 供给了插件模板,绑定事务方式类似于 jQuery 语法,eruda 供给的 licia 工具库均有对应方式,参考即可。

(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory();
} else {
root.erudaPlugin = factory();
}
})(this, function() {
return function(eruda) {
var Tool = eruda.Tool,
util = eruda.util;

var Plugin = Tool.extend({
name: 'plugin',
init: function($el) {
this.callSuper(Tool, 'init', arguments);
this._style = util.evalCss(
[
'.eruda-dev-tools .eruda-tools .eruda-plugin {padding: 10px;}',
'.eruda-tip {padding: 10px; background: #fff; color: #263238;}'
].join('.eruda-dev-tools .eruda-tools .eruda-plugin ')
);
$el.html(
'<div class="eruda-tip">Put whatever you want here:)</div>'
);
},
show: function() {
this.callSuper(Tool, 'show', arguments);
},
hide: function() {
this.callSuper(Tool, 'hide', arguments);
},
destroy: function() {
this.callSuper(Tool, 'destroy', arguments);
util.evalCss.remove(this._style);
}
});

return new Plugin();
};
});

Mock 数据整理

这一部分实在是比力花费体力的工作。需要整理每一个状态的数据,存储起来。前面提到公司供给的一个接口平台,基于去哪儿 YAPI 搭建,其供给了每个接口 mock 才能,我们增加 mock 数据即可。 前面设置文件中每一个状态下的id实在就是 mock 数据的参数。

利用的时辰,点选每一个状态,将状态值写入 localStorage 傍边,革新页面。axios 请求时检测能否有 localStorage 设置,有的话取出对应值,拼接到 YAPI mock 接口请求傍边,获得到 mock 数据,然后页面就是 mock 数据衬着出来的了。

初步尝试后,可以让我们在页面开辟进程中可以很方便得检察分歧页面下的页面展现,相比于之前的要末是查询线上数据,要末是经过数据机关一步一步找到对应状态,都大大节省了时候,提升了效力。

同时对于产物和设想同学,也可以快速的找对对应页面的样子,方便产物对现有页面停止调剂,设想同学对页面复原度停止检查等等。

不敷之处也有,就是数据的保护,现在每一个状态下存储的都是一份完整的数据,假如某一部分调剂了的话,那末一切的数据都要点窜,数据越多,保护本钱相对来说也越高。

以上是基于现有根本才能搭建出来的一个简单工具,固然还有更多改良空间,请多指教。

参考材料

[1] axios-mock-adapter: https://github.com/ctimmerm/axios-mock-adapter

[2] Eruda 若何写插件: https://github.com/liriliri/eruda/blob/master/doc/PLUGIN.md

[3] Eruda 工具库: https://licia.liriliri.io/docs_cn.html

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

怎样写好项目方案(专业项目方案写作定制)

怎样写好项目方案(专业项目方案写作定制)

在工作中,除了技术工作之外,我们也经常需要写一些项目的方案,当然如果公司比较大,

再谈“断直连”——政策、方案与不确定问题

再谈“断直连”——政策、方案与不确定问题

尽管“断直连”的基本方向已确定,但受各参与方合作意愿、政策理解角度、科技/服务能

运营方案怎么写(专业运营方案写作)

运营方案怎么写(专业运营方案写作)

作为运营人,写方案是必不可少的,而要想写一份优秀的运营方案,掌握框架、抓准方案的

产品方案怎么写(专业撰写产品方案)

产品方案怎么写(专业撰写产品方案)

想要做一名合格的产品经理,首先要能写好一份好的产品方案。一份好的产品方案,会在产

一个恐怕难以推广的自制CR-BOX方案

一个恐怕难以推广的自制CR-BOX方案

可能不需要再更新了,所以放在开头。因为对我这个方案不满意,所以试了其它的方案,用

小白进阶:一份模板,套用所有运营策划方案

小白进阶:一份模板,套用所有运营策划方案

2019.09.26更新:文章内容较多,前半部分主要阐述完成一份方案所需的运营思维,建议刚

论建筑设计方案如今有多卷?

论建筑设计方案如今有多卷?

这是一个故事。请各位看官老爷酌情相信。方案一方案一方案二方案二方案三方案三方案四

策划方案,不以页数论英雄

策划方案,不以页数论英雄

编辑导语:有些人在写策划方案时,总觉得页数越多,感觉准备得越充分,对策划案页数迷

一份完整的方案报告应该包括哪些方面?

一份完整的方案报告应该包括哪些方面?

听周边的同事和学员的反馈说,每次一到写方案的时候,经常会陷入一种非常焦虑的状态:

经国务院同意,八部门联合印发重磅改革方案!(全文)

经国务院同意,八部门联合印发重磅改革方案!(全文)

11月21日,据中国人民银行网站消息,为深入贯彻党中央、国务院决策部署,按照《长江三

一图速览!党和国家机构改革方案

一图速览!党和国家机构改革方案

制作:刘珂君、岳小乔、皇甫凌雨、冯慧文、安博文

延迟退休试点传来“好方案”:这3类人偷偷笑了,希望也有你

延迟退休试点传来“好方案”:这3类人偷偷笑了,希望也有你

我国正在加速进入老龄化,这是不争的事实。专家早在几年前就提出了延迟退休的方案,当

中共中央办公厅 国务院办公厅印发《粮食节约行动方案》

中共中央办公厅 国务院办公厅印发《粮食节约行动方案》

近日,中共中央办公厅、国务院办公厅印发了《粮食节约行动方案》,并发出通知,要求各

解决方案如何写:7个技巧,5个通病,项目总监给出的建议

解决方案如何写:7个技巧,5个通病,项目总监给出的建议

日常工作问题剖析实际的工作中,不管是项目经理还是售前工程师,给客户提供的大部分解

济南重磅方案公布

济南重磅方案公布

近日,济南市政府印发《济南市数字人民币试点工作实施方案》(以下简称《实施方案》)

干货!如何写出一份优秀完整的方案(专业写作方案)

干货!如何写出一份优秀完整的方案(专业写作方案)

无论是从事运营、策划或其他需要制定方案的岗位,写方案、改方案、执行方案都将成为你

项目管理 | 如何编写项目实施解决方案 | 推荐收藏

项目管理 | 如何编写项目实施解决方案 | 推荐收藏

如何保证项目实施成功?项目设计?需求报告?调研记录?项目培训?项目策划?上述提到

权威快报|坚持第九版防控方案和二十条措施不动摇、不走样

权威快报|坚持第九版防控方案和二十条措施不动摇、不走样

国务院联防联控机制11月22日举行新闻发布会表示当前,随着奥密克戎变异株快速传播我国

超硬干货:如何把需求变成产品方案?

超硬干货:如何把需求变成产品方案?

编辑导语:在产品经理的日常工作中,往往需要了解和收集许多的用户需求,那么,如何将

叮!送你一份“开挂式”写方案攻略

叮!送你一份“开挂式”写方案攻略

以下文章来源于泡泡Ter ,作者老1泡听身边不少朋友同事聊到他们写方案时的状态,经常

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信