uniapp中使用mockjs模拟接口测试总结(swiper轮播图示例)

完整总结下在uni-app中如何使用Mock.js模拟接口测试,这在后台接口未就绪的情况下非常有用。同时也给出个首页swiper轮播图的mock接口使用。网上的文章都不太完整,这里总结下完整的使用示例,同时也支持h5和小程序平台,分享给需要的小伙伴,喜欢的可以点击收藏。

前言

网上的大多数教程和使用都较麻烦,且有的不支持小程序平台,有的仅是针对H5或者后台的nodejs环境。这里完整总结下如何在uniapp中简单使用Mock.js模拟接口测试,同时支持小程序环境。使用很简单,没有网上介绍的那么复杂,同时也给出个首页swiper轮播图的mock接口使用举例。

对于前后端分离的项目,后端工程师的API数据迟迟没有上线;而前端工程师却没有JSON 数据进行数据填充,自己写后端模拟又太繁重;这个时候,Mock.js 就能解决这个问题,让前端工程师更加独立做自己。

Mock.js简介

Mock.js 是一个前端模拟数据生成工具,它可以帮助前端人员在开发过程中模拟后端接口的返回数据,以便在开发和测试阶段能够独立于后端进行工作,从而实现前后端的分离开发。

Mock.js官网 http://mockjs.com/
Mock.js的Github地址 https://github.com/nuysoft/Mock/wiki

主要功能和特点

  1. 随机数据生成:Mock.js 可以根据预设的数据模板生成随机数据,包括数字、字符串、对象、数组等,帮助开发人员快速生成测试数据。

  2. 数据模板定义:Mock.js 允许你定义数据模板,通过简单的语法描述数据结构和数据关系,然后自动生成模拟数据。

  3. 请求拦截:Mock.js 可以拦截通过 XMLHttpRequest 或 Fetch 发起的请求,并根据预先设定的规则返回模拟数据,从而实现前端与后端接口的解耦,加快前端开发速度。

  4. 灵活的语法:Mock.js 提供了丰富且灵活的数据模板语法,可以满足各种复杂数据生成的需求,包括嵌套数据、条件数据、循环数据等。

better-mock 介绍

better-mock fork 了 Mock.js (opens new window),在代码实现、构建脚本、单元测试上都选择了更加现代化的技术方案进行重构,所以使用者无需更改代码,可以 100% 兼容Mock.js。

虽然 Mock.js 已经很长时间已经没有维护了,但是还是会一些使用者在提 issue,提 PR,所以 better-mock 的规划是:重构Mock.js,在不改变 Mock.js API 的基础上进行长期迭代,并且解决一些 Mock.js 的 issue 和 PR

为了同时支持H5和小程序平台环境,推荐使用better-mock,这里也以better-mock的使用举例。

项目地址:https://gitcode.com/lavyun/better-mock

GitHub - lavyun/better-mock: Forked from Mockjs, Generate random data & Intercept ajax request. Support miniprogram.

如何使用

如果不使用vue,在网页界面中可以以下方式引入。

<script type="text/javascript" src="https://unpkg.com/better-mock/dist/mock.browser.js"></script>

可以在网页的控制台调试窗口测试和查看。 

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script src="http://mockjs.com/dist/mock.js"></script><script>const data = Mock.mock({'list|1-10': [{'id|+1': 1}]});console.log(data);console.log(JSON.stringify(data, null, 4));</script>
</body></html>

 在uni-app中使用,方法很简单,不用网上说的npm方式安装了(那种更适合pc的web端项目),直接在工程目录下建个mock文件夹,把下载好的文件放进去就行了。

如下所示:

这两个文件可以在以下网址资源中下载:

https://unpkg.com/better-mock@0.3.7/dist/mock.browser.js
https://unpkg.com/better-mock@0.3.7/dist/mock.mp.js

使用举例:

// mock文件夹下的test.js内容
import './better-mock/mock.mp.js'export function mockTest(){console.log('mockTest')const data = Mock.mock('https://yyz.cn/api/v1/test',{// 属性 list 的值是一个数组,其中含有3个元素'list|3': [{'name|3': '钱学森','age|1-100': 1,'isGay|4-6': true,'people|+1': ['黄种人', '黑种人', '白种人'],'sayHi': /[a-z][A-Z][0-9]/}]});// 输出结果console.log(JSON.stringify(data, null, 4));//使用四个空格缩进
}

把需要mock的接口,都写在了一个叫做mockTest的函数里,并用export关键字导出。

在uni-app的main.js中,全局加载一下就完成了使用。

//main.js
import App from './App'
// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({...App
})
app.$mount()
// #endif// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {const app = createSSRApp(App)return {app}
}
// #endifimport { $http } from './utils/http.js'
uni.$http = $http
// 配置请求根路径
$http.baseUrl = 'https://yyz.cn'// 请求开始之前做一些事情
$http.beforeRequest = function (options) {uni.showLoading({title: '数据加载中...',})
}// 请求完成之后做一些事情
$http.afterRequest = function () {uni.hideLoading()
}//mock数据,用于测试接口,注意末尾空一行
import {mockTest} from './mock/test.js'
mockTest()

这样,配置的请求路径跟你mock的接口匹配上的话,就会自动被mock接口拦截并响应mock的数据。如果生产发布的话,改下baseUrl和去掉import的mockTest就好了。其他地方无任何侵入。

uni-app的轮播图示例

接下来实战一把,结合实例把mockjs用起来看看效果。

以uni-app的轮播图举例:

<template><view class="content"><view class="uni-margin-wrap"><swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval":duration="duration"  lazy-render><swiper-item v-for="item in swiperList" :key="item.id"><image :src="item.imageUrl" :alt="item.title" mode="widthFix" class="swiper-image"></image><view class="swiper-desc" v-if="item.description">{{ item.description }}</view></swiper-item></swiper></view><uni-card>这是一个uni-card.</uni-card><uni-badge text="1"></uni-badge><uni-badge text="3" type="primary" :inverted="true"></uni-badge><view class="uni-flex uni-row"><view class="flex-item uni-bg-red">A</view><view class="flex-item uni-bg-green">B</view><view class="flex-item uni-bg-blue">C</view></view></view>
</template><script>//import { getSwiperList } from '@/api/home.js';export default {data() {return {title: 'Hello',indicatorDots: true,autoplay: true,interval: 2000,duration: 500,// 轮播图的数据列表,默认为空数组//swiperList:[],swiperList: [{id: 1,imageUrl: '/static/swiper/1.jpg',title: '标题1',description: '描述1',},{id: 2,imageUrl: '/static/swiper/2.jpg',title: '标题2',description: '描述2',},{id: 3,imageUrl: '/static/swiper/3.jpg',title: '标题3',description: '描述3',}]}},onLoad() {console.log("onLoad")//console.log(this.swiperList)},methods: {},mounted() {console.log("mounted")console.log(this.swiperList)}}
</script><style scoped>.content {display: flex;flex-direction: column;align-items: center;justify-content: center;}.uni-margin-wrap {width: 690rpx;width: 100%;}.swiper {height: 300rpx;}.swiper-image{width: 100%; height: auto;}.swiper-desc {position: absolute;bottom: 20px;left: 0;right: 0;color: #fff;background-color: rgba(0, 0, 0, 0.5);padding: 10px;text-align: center;}.swiper-item {display: block;height: 300rpx;line-height: 300rpx;text-align: center;}.title {font-size: 36rpx;color: #8f8f94;}
</style>

在上述示例中,仅仅是把图片数据信息硬编码到了 swiperList中,图片是放在了本地的static文件夹中。先测试下轮播图可以正常的加载。接来下实现getSwiperList接口。

在项目的根目录下新建api文件夹,用来存放前端需要用到的api接口实现。新建个home.js,放置首页需要用到的接口实现。


// api/home.js
export const getSwiperList = async () => {try {console.log('getSwiperList request');const response = await uni.$http.get('/api/v1/home/swiperdata');console.log(response.data.list);if (response.statusCode !== 200) {uni.showToast({title: '数据请求失败! ',duration: 1500,icon: 'none',});return [];}return response.data.list;} catch (error) {console.error('Network request failed:', error);uni.showToast({title: '网络请求失败! ',duration: 1500,icon: 'none',});return [];}
};

上述实现了一个获取轮播图的getSwiperList接口调用,但是后台的轮图接口还未就绪,如何模拟呢?接下来就该使用better-mock模拟接口了。

在mock文件夹里新建一个test.js文件,在里面写你要mock的接口。

如:我的test.js文件内容如下:

// mock文件夹下的test.js内容
import './better-mock/mock.mp.js'export function mockTest(){console.log('mockTest')const data = Mock.mock('https://yyz.cn/api/v1/test',{// 属性 list 的值是一个数组,其中含有3个元素'list|3': [{'name|3': '钱学森','age|1-100': 1,'isGay|4-6': true,'people|+1': ['黄种人', '黑种人', '白种人'],'sayHi': /[a-z][A-Z][0-9]/}]});// 输出结果console.log(JSON.stringify(data, null, 4));//使用四个空格缩进const data1 = Mock.mock('https://yyz.cn/api/v1/home/swiperdata',{// 属性 list 的值是一个数组,其中含有3个元素'list|3': [{'id|+1': 1,'imageUrl|+1': ['/static/swiper/1.jpg','/static/swiper/2.jpg', '/static/swiper/3.jpg'],'title|4-6': '标题','description|2-3':'这是描述'}]});// 输出结果console.log(JSON.stringify(data1, null, 4));//使用四个空格缩进
}

经过以上步骤,已经完成一个接口的模拟啦,可以在uni-app中完美运行。

最后附上完整工程项目源码,可以作为基础工程模版,封装了网络库:

https://download.csdn.net/download/qq8864/89351804

其他资源

介绍 | Better-Mock

语法规范 | Better-Mock

UNPKG - better-mock

uni-app引入Better-Mock - 简书

使用Mock.js快速模拟接口 - 简书

更智能更便捷的模拟数据生成工具 - Better Mock-CSDN博客

玩转Mock.js:构建模拟数据的利器_mockjs-CSDN博客

uni-app开发教程之swiper组件使用教程_uniapp swiper-CSDN博客

swiper | uni-app官网

https://www.cnblogs.com/winchance/p/13230063.html

GitHub - nuysoft/Mock: A simulation data generator

介绍 | Better-Mock

GitHub - lavyun/better-mock: Forked from Mockjs, Generate random data & Intercept ajax request. Support miniprogram.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack5 splitChunks分割代码

首先明确webpack 自身的打包行为 当splitChunks为false时&#xff0c;此时不启用任何打包设置 可以看到&#xff0c;静态引入全都打到一个chunk里&#xff0c;动态引入会拆分出来一个chunk,这是纯webpack无配置的打包&#xff0c; webpack会给每个模块打上标记 ,如下 { m…

Python使用multiprocessing实现多进程

大家好&#xff0c;当我们工作中涉及到处理大量数据、并行计算或并发任务时&#xff0c;Python的multiprocessing模块是一个强大而实用的工具。通过它&#xff0c;我们可以轻松地利用多核处理器的优势&#xff0c;将任务分配给多个进程并同时执行&#xff0c;从而提高程序的性能…

基于transformers框架实践Bert系列3-单选题

本系列用于Bert模型实践实际场景&#xff0c;分别包括分类器、命名实体识别、选择题、文本摘要等等。&#xff08;关于Bert的结构和详细这里就不做讲解&#xff0c;但了解Bert的基本结构是做实践的基础&#xff0c;因此看本系列之前&#xff0c;最好了解一下transformers和Bert…

【JavaEE】加法计算器与用户登录实战演练

目录 综合练习加法计算器1. 准备工作2. 约定前后端交互接口3. 服务器代码 用户登录1. 准备工作2. 约定前后端交互接口3. 服务器代码4. 调整前端页面代码 综合练习 理解前后端交互过程接⼝传参, 数据返回, 以及⻚⾯展⽰ 加法计算器 需求: 输⼊两个整数, 点击"点击相加&q…

56. UE5 RPG 给敌人添加AI实现跟随玩家

在这一篇里&#xff0c;我们要实现一下敌人的AI&#xff0c;敌人也需要一系列的行为&#xff0c;比如朝向英雄攻击&#xff0c;移动&#xff0c;在满足条件时施放技能。这些敌人的行为可以通过使用UE的内置的AI系统去实现。 在UE里&#xff0c;只要是基于Character类创建的蓝图…

安卓绕过限制直接使用Android/data无需授权,支持安卓14(部分)

大家都知道&#xff0c;安卓每次更新都会给权限划分的更细、收的更紧。   早在安卓11的时候还可以直接通过授权Android/data来实现操作其他软件的目录&#xff0c;没有之前安卓11授权的图了&#xff0c;反正都长一个样&#xff0c;就直接贴新图了。   后面到了安卓12~13的…

信息系统项目管理师0128:输出(8项目整合管理—8.6管理项目知识—8.6.3输出)

点击查看专栏目录 文章目录 8.6.3 输出 8.6.3 输出 经验教训登记册 经验教训登记册可以包含执行情况的类别和详细的描述&#xff0c;还可包括与执行情况相关的影响、建议和行动方案。经验教训登记册可以记录遇到的挑战、问题、意识到的风险和机会以及其他适用的内容。经验教训…

Debezium+Kafka:Oracle 11g 数据实时同步至 DolphinDB 解决方案

随着越来越多用户使用 DolphinDB&#xff0c;各式各样的应用场景对 DolphinDB 的数据接入提出了不同的要求。部分用户需要将 Oracle 11g 的数据实时同步到 DolphinDB 中来&#xff0c;以满足在 DolphinDB 中实时使用数据的需求。本篇教程将介绍使用 Debezium 来实时捕获和发布 …

npm介绍、常用命令详解以及什么是全局目录

目录 npm介绍、常用命令详解以及什么是全局目录一、介绍npm的主要功能npm仓库npm的配置npm的版本控制 二、命令1. npm init: 初始化一个新的Node.js项目&#xff0c;创建package.json文件。package.json是一个描述项目信息和依赖关系的文件。2. npm install <package_name&g…

LeetCode算法题:42. 接雨水(Java)

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3…

基于vue3速学angular

因为工作原因&#xff0c;需要接手新的项目&#xff0c;新的项目是angular框架的&#xff0c;自学下和vue3的区别&#xff0c;写篇博客记录下&#xff1a; 参考&#xff1a;https://zhuanlan.zhihu.com/p/546843290?utm_id0 1.结构上&#xff1a; vue3:一个vue文件&#xff…

python:pycharm虚拟解释器报错环境位置目录为空

目录 解释器分控制台解释器 和 pycharm解释器 控制台解释器切换&#xff1a; pycharm解释器 解释器分控制台解释器 和 pycharm解释器 控制台解释器切换&#xff1a; 切换到解释器下 激活解释器 查看解释器 where python 激活成功 这时在控制台使用python xxx.py 可以…

​​​【收录 Hello 算法】10.1 二分查找

目录 10.1 二分查找 10.1.1 区间表示方法 10.1.2 优点与局限性 10.1 二分查找 二分查找&#xff08;binary search&#xff09;是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空…

​​​【收录 Hello 算法】第 10 章 搜索

目录 第 10 章 搜索 本章内容 第 10 章 搜索 搜索是一场未知的冒险&#xff0c;我们或许需要走遍神秘空间的每个角落&#xff0c;又或许可以快速锁定目标。 在这场寻觅之旅中&#xff0c;每一次探索都可能得到一个未曾料想的答案。 本章内容 10.1 二分查找10.2 二…

恶劣天候激光雷达点云模拟方法论文整理

恶劣天候点云模拟方法论文整理 模拟雨天点云&#xff1a;【AAAI2024】模拟雪天点云&#xff1a;【CVPR 2022 oral】模拟雾天点云&#xff1a;【ICCV2021】模拟点云恶劣天候的散射现象&#xff1a;【Arxiv 2021】模拟积水地面的水花飞溅点云&#xff1a;【RAL2022】 模拟雨天点云…

蓝桥杯Web开发【模拟题三】15届

1.创意广告牌 在"绮幻山谷"的历史和"梦幻海湾"的繁华交汇之处&#xff0c;一块创意广告牌傲然矗立。它以木质纹理的背景勾勒出古朴氛围&#xff0c;上方倾斜的牌子写着"绮幻山谷的风吹到了梦幻海湾"&#xff0c;瞬间串联了过去与现在&#xff0…

EPIC免费领取《骑士精神2》 IGN9分神作骑士精神2限时免费领

EPIC免费领取《骑士精神2》 IGN9分神作骑士精神2限时免费领 最近Epic一直为玩家们送出各种游戏&#xff0c;从《龙腾世纪审判》到《模拟农场22》&#xff0c;而就在今天&#xff0c;epic又为玩家们送出了IGN评分9分高分的骑士精神2.这款游戏&#xff0c;该游戏是一款由Tripwir…

vue连接mqtt实现收发消息组件超级详细

基本概念&#xff1a; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;专为低带宽、高延迟或不稳定的网络环境设计。以下是MQTT实现收发消息的基本原理&#xff1a; 客户端-服务器模型&#xff1a…

数据量较小的表是否有必要添加索引问题分析

目录 前言一、分析前准备1.1、准备测试表和数据1.2、插入测试数据1.3、测试环境说明 二、具体业务分析2.1、单次查询耗时分析2.2、无索引并发查询服务器CPU占用率分析2.3、添加索引并发查询服务器CPU占用率分析 三、总结 前言 在一次节日活动我们系统访问量到达了平时的两倍&am…

【小沐学GIS】GDAL库安装和使用(C++、Python)

文章目录 1、简介2、下载和编译&#xff08;C&#xff09;2.1 二进制构建2.1.1 Conda2.1.2 Vcpkg 2.2 源代码构建2.2.1 nmake.opt方式构建2.2.2 generate_vcxproj.bat方式构建 2.3 命令行测试2.3.1 获取S57海图数据 2.4 代码测试2.4.1 读取tiff信息 3、Python3.1 安装3.2 测试3…