Skip to content
On this page

Mock 解决方案

市面上所有的 Mock 方案

后端方案

  1. Swagger或它的衍生产品提供的后端 Mock 方案

  2. 由 API 后端管理系统提供的后端 Mock 方案

前端方案

  1. Mockjs提供的无服务的前端 Mock 方案

  2. Jest为代表的单元测试框架提供的 Mock 功能

  3. vue-element-admin提供的基于webpackdevServer的 Mock Server 方案

  4. JSON Server为代表的独立服务的前端 Mock 方案

  5. Mock Service Worker为代表的利用 Service Worker 拦截真实请求的前端 Mock 方案

为什么不建议用后端解决方案

因为 Mock 是前端的需求,而不是后端的需求,也就是说只有前端工程师在意,后端工程师是不在意的。基于这个前提,对比如下:

前端 Mock 方案后端 Mock 方案
语言Node.js后端语言
物理服务器本机做服务器或无需服务器需要找后端同事部署
方案微调容易繁琐
开发、调试便捷繁琐

后端方案优势在于联合测试,毕竟数据库统一保存数据便于问题复现,不过测试阶段通常使用测试环境和从生产环境导入的测试数据,已经和 Mock 方案无关。

为什么否掉 Jest 方案

这个方案不是专门的 Mock 解决方案,显得臃肿,如果你从不做单元测试,那么不建议用Jest作为Mock解决方案。如果你用单元测试,那么Jest支持 Mock,你应当直接选择Jest

剩下的 3 个前端方案的对比

所谓对比,是基于我对 3 个方案的优化之后的效果对比,而不是它们自身能力的对比。另外,由于我觉得“Mock Data 支持增删改永久化储存”不太重要,实现起来过于繁琐,所以没有给Mock ServerMock Service Worker实现这个需求。

Mock ServerJSON ServerMock Service Worker
原理webpack devServer 拦截请求独立 Node.js 服务器Service Worker 拦截请求
入侵 vue.config.js一行代码配置devServer.proxy不入侵
入侵 main.jsif语句if语句if语句
额外命令行进程不需要需要不需要
支持随项目启动支持因为是独立的服务,所以无法随项目启动支持
Mock Data 支持增删改永久化储存不支持,另想办法可以支持支持不支持,另想办法可以支持
支持生产环境 Mock支持,但开发者工具看不到请求支持,但要使用公共服务器另外运行一套 JSON Server,较繁琐支持,但要使用 https: 协议且证书合法

优势总结

Mock Server

  1. 随项目自启动,没有额外进程。

  2. 与 webpack 集成,如果你喜欢 webpack 的话,这就算是它的优势。

JSON Server

  1. Mock Data 支持增删改永久化储存。

Mock Service Worker

  1. 随项目自启动,没有额外进程。

  2. 使用 Service Worker 技术,如果你喜欢这个技术,这就算是它的优势。

杨亮的前端解决方案