前端:使用 Mock Service Worker 模拟数据
安装
在项目根目录执行以下命令:
1 | $ npm install msw --save-dev |
定义 mocks(模拟 REST API)
使用 request handler 来定义要模拟的请求。
创建
src/mocks
目录:1
$ mkdir src/mocks
创建
src/mocks/handler.js
文件:1
$ touch src/mocks/handlers.js
从
msw
导入rest
:1
2// src/mocks/handlers.js
import { rest } from "msw";
以下面两个 API 为例:
POST /login
,允许用户登录。GET /user
,返回登录用户的信息。
1 | // src/mocks/handlers.js |
要模拟返回值,需要在对应的 post
或 get
方法中传入 response resolver。response resolver 函数接受 3 个参数:
req
:匹配的请求信息。res
:用于模拟返回值的方法集。ctx
:设置status code
、headers
、body
等。
1 | // src/mocks/handlers.js |
集成
上面的 src/mocks/handlers.js
文件在 Browser 和 Node 环境是通用的。因为 Service Worder 不支持在 Node 中运行,所以集成过程因环境而异。
集成到 Browser 环境
使用 Mock Service Worker CLI 工具在项目根目录执行:
1 | $ npx msw init <PUBLIC_DIR> --save |
将 <PUBLIC_DIR>
替换成你项目中的 public 目录。比如,使用的是 Create React App 创建的项目应执行:
1 | $ npx msw init public/ --save |
配置 worker
在
src/mocks
目录下创建browser.js
文件:1
$ touch src/mocks/browser.js
从
msw
导入setupWorker
方法,把上面创建的src/mocks/handler.js
文件中的handler
也一并导入进来:1
2
3
4
5
6// src/mocks/browser.js
import { setupWorker } from "msw";
import { handlers } from "./handlers";
// This configures a Service Worker with the given request handlers.
export const worker = setupWorker(...handlers);
启动 worker
Mock Service Worker 不应被用于生产环境,应在测试环境中使用:
1 | // src/index.js |
验证和检查
在浏览器控制台中应能看到打印出的成功的消息:
集成到 Node 环境
参阅 这里 的文档说明,按照步骤可将 msw 集成到 Node 环境。
小结
Mock Service Worker 是一个非常强大的 mock server 库,可查看 官网 查看详细信息。