高质量Mock架构核心是按真实契约开发,要求规则与接口对齐、生成具业务语义、拦截适配多运行时、开关受环境策略控制,并需工程化管控准入、开关、异常覆盖及契约同步。

高质量 Mock 架构不是让数据“能跑起来”,而是让前端在无后端依赖时,依然能按真实契约开发、测试、交付。它要解决的不是“有没有数据”,而是“数据是否可信、可维护、可协同、可演进”。核心在于:规则与接口对齐、生成与业务语义一致、拦截与运行时解耦、开关与环境策略可控。
Mock 规则必须从接口契约出发
很多团队把 Mock 当成“造几条假数据”,结果联调时字段名、嵌套结构、分页包装、错误码全对不上。高质量 Mock 的起点是 OpenAPI(或 Swagger)文档——不是人工抄写,而是用工具自动解析生成基础规则模板。
- 推荐流程:后端导出
openapi.json→ 前端用@apidevtools/swagger-parser解析 → 提取路径、方法、请求体 schema、响应体 schema → 自动生成 Mock 规则骨架 - 关键约束:Mock 返回的
data字段必须严格匹配接口定义中的200.response.schema.properties.data;分页字段(如total、page)需按后端约定动态计算,不能硬写死 - 示例:若接口定义返回
{ code: 0, message: "ok", data: { users: [{ id: number, name: string }] } },Mock 规则就必须保持该包装结构,而非直接返回users数组
数据生成需具备业务语义,而非随机堆砌
Mock.js 的 @cname、@email 很方便,但“张三”和“李四”无法触发权限逻辑,“active”状态永远不暴露禁用分支。高质量生成要注入业务规则:
- 用函数代替占位符:例如
status: () => ['active', 'disabled', 'pending'][Math.floor(Math.random() * 3)],确保三种状态按比例出现 - 关联字段联动:用户
role: 'admin'时,permissions字段应自动包含['user:read', 'user:write'];role: 'guest'则只含['user:read'] - 时间字段带业务逻辑:创建时间
createdAt: '@datetime("yyyy-MM-dd HH:mm")'可接受,但更优是createdAt: () => new Date(Date.now() - Math.random() * 7 * 24 * 60 * 60 * 1000).toISOString(),让数据落在合理时间窗口内
拦截层需适配现代构建与运行时环境
Vite/Next.js/RSC 等新架构下,传统全局 XMLHttpRequest 拦截已失效。高质量 Mock 必须分层适配:
立即学习“前端免费学习笔记(深入)”;
-
开发阶段(Vite):用
vite-plugin-mock@2.9.6(稳定版),规则写在mock/*.ts,支持热更新、环境变量判断(process.env.USE_MOCK === 'true') -
SSR/边缘环境(Next.js RSC):不能依赖浏览器 API,改用服务端中间件拦截:在
middleware.ts中识别/api/**请求,匹配 Mock 规则并NextResponse.json()返回 -
测试阶段(Vitest):用
msw(Mock Service Worker)替代 Mock.js,通过 worker 脚本拦截 fetch/XHR,支持真实网络行为模拟(延迟、失败、重定向)
工程化落地的关键控制点
再好的设计,落地时缺了管控就容易退化为“个人玩具”。必须固化四个机制:
-
规则准入检查:Git Hook(pre-commit)校验新增 Mock 文件是否包含
description字段,说明该规则对应的接口文档链接和覆盖场景 -
环境开关强约束:Mock 仅在
dev和test环境启用;build阶段通过插件自动移除所有 Mock 代码,禁止任何条件编译残留 - 异常场景覆盖率看板:每个接口 Mock 规则需声明覆盖的异常类型(如 401、403、429、timeout),CI 流程扫描并生成覆盖率报告
- 与后端契约同步机制:每周定时拉取最新 OpenAPI 文档,比对变更项,自动生成 diff 报告并通知前端负责人


















