## Mock简介
* Mock是模拟对象的意思,用于进行被测组件对外依赖的模拟。
* Mock 是测试驱动开发必备之利器, 只要有状态, 有依赖, 做单元测试就不能没有 Mock
* 在 API 或 集成测试的时候, 如果依赖于第三方的 API, 也时常使用 mock server 或 mock proxy
## 如何使用
Sword已经完美集成了Mock,可以很方便地模拟动静态数据,也可以模拟网络延时,达到对接服务端的真实性与准确性。下面我们来看下如何在Sword中使用Mock
1. 我们到mock文件夹下创建demo.js
![](https://box.kancloud.cn/ec4f17cae3c7d496c811ab138770ba56_1628x848.png)
2. function则是创建一个mock函数,设定接口返回值
3. 然后将其export,定义为GET类型的接口,并且接口请求地址为 '/api/demo/detail'
4. 因为Sword默认端口为8888,所以访问的地址为 http://localhost:8888/api/demo/detail
5. 打开postman(一种很好用的接口调试工具,大家也可选型其他类型的工具),调用接口查看返回成功,一个mock接口创建成功
![](https://box.kancloud.cn/9298ba76984d31a25c67533392f7f08b_1220x804.png)
<br>
## Mock进阶
只是简单的返回一个固定的数据,没有网络请求延时,这样无法达到我们一些复杂业务场景的需求,所以我们需要对其进行更深一层次的定制。
### 根据请求参数动态判断,返回mock数据
1. 我们给mock接口传入数据,根据数据来动态展示接口返回
2. 代码如下操作,增加请求参数的动态获取
![](https://box.kancloud.cn/3de71e1883876d6cde6987c76222f7c9_958x348.png)
3. 主要就是根据req.query来获取传递的参数,打开postman查看一个简单的动态接口已经诞生
![](https://box.kancloud.cn/8e8ff1b97ac15556ab94c8ee00c670b2_1054x850.png)
4. 优化返回数据
![](https://box.kancloud.cn/dce7e7847b0eb98f78ec0b3e9b640fb5_1112x408.png)
5. 再次打开postman调用接口发现返回效果与服务器接口一致
![](https://box.kancloud.cn/4fe193eb184cb8097d44163a5914bfd6_936x942.png)
<br>
### 引入roadhog-api-doc模拟网络请求延时
1. mock数据模拟完毕后,发现请求耗时非常小,此时如果想模拟真实环境的网络延时,可以引入roadhog-api-doc模块,具体代码如下,我们将延时改为1秒
![](https://box.kancloud.cn/6596f9e7b635a287575b692c0ed1f06a_1112x538.png)
2. 打开postman发现网络延时生效
![](https://box.kancloud.cn/714eaeaf2cc5e642614d87d0951b3c58_1934x972.png)