前端 Mock 工具

名称地址安装
Mock.jshttps://github.com/nuysoft/Mocknpm install mockjs
mockmhttps://github.com/wll8/mockmnpm install mockm
JSON Serverhttps://github.com/typicode/json-servernpm install json-server
MSW(Mock Service Worker)https://github.com/mswjs/mswnpm install msw
Mirage JShttps://github.com/miragejs/miragejsnpm install miragejs

Mirage JS

特性:

  • 复写 fetchXMLHttpRequest 实现拦截,所以在 Dev Tools 中的 Network 是看不到请求的。
  • 默认全部拦截,直通函数 passthrough 匹配不太友好。

使用它主要是因为不用配置代理,也不用单独去启动一个新的端口来承载 Mock Server,相对使用简单,用来做测试还是挺方便的。体验上的不足就是 Network 面板看不到请求了,不过可以接受。

示例:

import { createServer } from "miragejs"createServer({routes() {this.namespace = "api"this.get("/movies", () => {return {movies: [{ id: 1, name: "Inception", year: 2010 },{ id: 2, name: "Interstellar", year: 2014 },{ id: 3, name: "Dunkirk", year: 2017 },],}})},
})

超时配置

this.get("/movies",() => {return {movies: [{ id: 1, name: "Inception", year: 2010 },{ id: 2, name: "Interstellar", year: 2014 },{ id: 3, name: "Dunkirk", year: 2017 },],}},{ timing: 4000 }
)

OR

this.get("/movies", () => {return new Promise((res) => {setTimeout(() => {res({movies: [{ id: 1, name: "Inception", year: 2010 },{ id: 2, name: "Interstellar", year: 2014 },{ id: 3, name: "Dunkirk", year: 2017 },],});}, 4000);});
});

根据 url 参数动态配置超时:

// fetch("/movies?t=2000")
this.get("/movies", (_, req) => {return new Promise((res) => {setTimeout(() => {res({movies: [{ id: 1, name: "Inception", year: 2010 },{ id: 2, name: "Interstellar", year: 2014 },{ id: 3, name: "Dunkirk", year: 2017 },],});}, req.queryParams.t || 0);});
});

请求直通

官方的文档不生效,看了下代码实现有问题,如下:

// createPretender
this.checkPassthrough = function (request) {let shouldPassthrough = server.passthroughChecks.some((passthroughCheck) => passthroughCheck(request));if (shouldPassthrough) {let url = request.url.includes("?")? request.url.substr(0, request.url.indexOf("?")): request.url;this[request.method.toLowerCase()](url, this.passthrough);}return originalCheckPassthrough.apply(this, arguments);
};// Server
passthrough(...paths) {// this only works in browser-like environments for now. in node users will have to configure// their own interceptor if they are using one.if (typeof window !== "undefined") {let verbs = ["get", "post", "put", "delete", "patch", "options", "head"];let lastArg = paths[paths.length - 1];if (paths.length === 0) {paths = ["/**", "/"];} else if (Array.isArray(lastArg)) {verbs = paths.pop();}paths.forEach((path) => {if (typeof path === "function") {this.passthroughChecks.push(path);} else {verbs.forEach((verb) => {let fullPath = this._getFullPath(path);this.pretender[verb](fullPath, this.pretender.passthrough);});}});}
}

可以采用这种方式,来把 namespace 外的请求,都不做处理,把以下代码入到 routes 中执行:

this.passthrough((req) => {return req.url.indexOf(this.namespace) === -1;
});

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

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

相关文章

Awesome Tools Site

1. Chrome Extension Fast-GitHub 地址Octotree 地址LP 二维码 地址LP JSON 可视化 地址网址小尾巴 地址 2. 油猴 视频 地址 3. VS Code Indent-Rainbow 地址GitLens 地址Search node_modules 地址 4. 在线小工具 ICON 生成 地址图片添加边框 地址Carbon 代码图片 地址 …

前端状态机系列:SCXML与XState对应关系

1. 前置说明 这次再说明下自己对状态图的看法。状态图虽然有非常多的优势(参考上篇文章),如果你想使用,关于是否对整个旧项目进行全量状态图化,这里给一个适应范围是:项目中复杂的部分进行状态图建模是非常…

常用注入 Script 方法

1. 背景 如果你想在当前的页面,试一下某个 JS 工具库,而这个工具库恰好你没安装。(如 lodash)如果你想分享一段脚本给别人,而又不希望别人在执行的过程太过麻烦。(如你写了一段恢复复制和右键功能的脚本&a…

多年前的树莓派 B+ 重新工作

1. 前言 最近整理房间的时候,发现在一块大约在 2014 年购买的树莓派,看了下电路板,型号是 b,看了下官网的参数: CPU: ARM1176JZF-S 核心 700MHz 单核RAM: 512MB 确实有点太弱了。 最近刚好想做一个家用的文件 Serve…

create-react-app 使用代理做 mock

1. 背景 很多情况下,为了测试需要一些接口的 mock 场景,基于 create-react-app 生产的项目 好处在于它内置了这块代理的能力,给用户提供了很大的方便。 2. 代理方式 create-react-app 默认提供了两种方式,关联到 webpack-dev-s…

解决写文档对于图片边框的强迫症

1. 写文档的困扰 在写文档进行配图时,很多时候图片是白色背景的,会导致文章中的图片区域附近有大量空白的感觉,强迫症患者很难受。 目前语雀做的是很好的,可以给图片加边框或者阴影,而一些文档博客平台(C…

实现图片本地化 ServiceWorker + IndexedDB

1. 背景 在一些安全场景,或者一些本地化的场景(如本地化的 Markdown 记事本),如果有图片上传并需要查看的场景,在不上传到服务器的情况下,实现这个效果,通常是把图片 Base64 化,但编…

XState Viz 可视化和调试状态机

1. 前言 状态机的一大好处就是可以可视化状态,降低业务的理解成本和相互间的沟通成本。 目前 XState 官方提供的可视化工具已经做的很不错了,但用起来偏重,国内访问也比较慢。这边我再原基础上进行了优化,并增加了部分新功能&am…

国内高速前端 Unpkg CDN 替代方案

1. 背景 目前国内有很多 NPM 的 CDN,可以高速支持相关包文件的访问下载,如: BootCDN: www.bootcdn.cn七牛云: www.staticfile.org360: cdn.baomitu.com字节跳动: cdn.bytedance.com 但这些 CDN 并不全,很多 NPM 上的包 在这些 …

小米 12S Utra 莱卡水印生成在线工具

前言 最近看到小米 12S Utra 的发布,看了下详情页面,发现演示的照片都好看的,包含了品牌、设备、镜头、位置等信息,如下图所示: 作为一个摄影爱好者,也希望把自己的照片也输出这些信息。 但目前此类水印…

解决 Rust Tauri 1.0 构建时下载 WiX失败

Rust 啥都好,就是构建太慢太慢。用我的 M1 构建 Mac 应用 10 分钟内还能拿下,但其它普通配置的就太慢了,即便用 Github Actions 大约也近 30 分钟才能构建完: 找一台高配置的 Windows 主机,结果经历了长时间的编译之后…

Rust Wasm 图片转 ASCII 艺术

有一些隐藏在代码中的 ASCII 有意思的图片,如: /*__ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||_ \| | \\\ - /| | || \_| \---// |_/ |\ .-\__ -. -__/-.…

我的新书《PWA入门与实践》上市了

前言 我初接触PWA是在2017年年初,当时参加了一个前端分享会,其中一个主题就是与PWA相关的,介绍了PWA的Service Worker和安装到桌面的能力,以及这门技术未来的发展趋势,听完这个分享后,我就为PWA的一些能力…

Linux网络编程组播测试代码

Linux网络编程组播测试代码 (转载)组播客户端代码如下&#xff1a; #include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define BUFLEN 255int main(int arg…

ubuntu下搭建tftp服务器

1.1 搭建tftp服务器TFTP&#xff08;Trivial File Transfer Protocol&#xff0c;简单文件传输协议&#xff09;&#xff0c;是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议&#xff0c;适合于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而…

ubuntu 10.10 修改下载源的方法

打开Ubuntu的终端,输入sudo gedit /etc/apt/sources.list在最后加上如下源&#xff1a;deb http://mirror.lupaworld.com/ubuntu maverick main restricted universe multiversedeb http://mirror.lupaworld.com/ubuntu maverick-security main restricted universe multiverse…

Linux ARM交叉编译工具链制作过程

一、下载源文件 源代码文件及其版本与下载地址&#xff1a; Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 http://mirrors.kernel.org/gnu/gcc/gcc-4.4.4/ Glibc-2.11.2.tar.bz2 Glibc-ports-2.11.tar.bz2 http://ftp.gnu.org/gnu/glibc/ Gmp-4.…

ARM开发板上iconv_open(utf-8, gb2312) 调用失败的解决方法(转)

ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法 应用程序代码如下&#xff1a;static int code_convert(char* from_charset, char* to_charset, char* inbuf, size_t inlen, char* outbuf, size_t outlen){ iconv_t cd; char…

linux c语言获取时间

在程序中&#xff0c;经常需要输出系统的当前时间、计算程序的执行时间、使用计时器等。 一、时间的类型 1.格林威治标准时间 coordinated universal time(UTC)是世界标准时间&#xff0c;即常说的格林威治标准时间(greenwich mean time,GMT). 2.日历时间 日历时间(calendar ti…

source insight快捷键及使用技巧

source insight快捷键及使用技巧 退出程序 : AltF4 重画屏幕 : CtrlAltSpace 完成语法 : CtrlE 复制一行 : CtrlK 恰好复制该位置右边的该行的字符 :…