zoukankan      html  css  js  c++  java
  • 【前端开发测试】umi 的 mock 功能

    umi 里约定 mock 文件夹下的文件即 mock 文件,文件导出接口定义,支持基于 require 动态分析的实时刷新,支持 ES6 语法,以及友好的出错提示,详情参看 umijs.org

    export default {
      // 支持值为 Object 和 Array
      'GET /api/users': { users: [1, 2] },
    
      // GET POST 可省略
      '/api/users/1': { id: 1 },
    
      // 支持自定义函数,API 参考 express@4
      'POST /api/users/create': (req, res) => { res.end('OK'); },
    };

    当客户端(浏览器)发送请求,如:GET /api/users,那么本地启动的 umi dev 会跟此配置文件匹配请求路径以及方法,如果匹配到了,就会将请求通过配置处理,就可以像样例一样,你可以直接返回数据,也可以通过函数处理以及重定向到另一个服务器。

    比如定义如下映射规则:

    'GET /api/currentUser': {
      name: 'momo.zxy',
      avatar: imgMap.user,
      userid: '00000001',
      notifyCount: 12,
    },

    访问的本地 /api/currentUser 接口:

    请求头

    返回的数据

    引入 Mock.js

    Mock.js 是常用的辅助生成模拟数据的第三方库,当然你可以用你喜欢的任意库来结合 umi 构建数据模拟功能。

    import mockjs from 'mockjs';
    
    export default {
      // 使用 mockjs 等三方库
      'GET /api/tags': mockjs.mock({
        'list|100': [{ name: '@city', 'value|1-100': 50, 'type|0-2': 1 }],
      }),
    };

    添加跨域请求头

    设置 response 的请求头即可:

    'POST /api/users/create': (req, res) => {
      ...
      res.setHeader('Access-Control-Allow-Origin', '*');
      ...
    },

    合理的拆分你的 mock 文件

    对于整个系统来说,请求接口是复杂并且繁多的,为了处理大量模拟请求的场景,我们通常把每一个数据模型抽象成一个文件,统一放在 mock 的文件夹中,然后他们会自动被引入。

    如何模拟延迟

    为了更加真实地模拟网络数据请求,往往需要模拟网络延迟时间。

    手动添加 setTimeout 模拟延迟

    你可以重写请求的代理方法,在其中添加模拟延迟的处理,如:

    'POST /api/forms': (req, res) => {
      setTimeout(() => {
        res.send('Ok');
      }, 1000);
    },

    使用插件模拟延迟

    上面的方法虽然简便,但是当你需要添加所有的请求延迟的时候,可能就麻烦了,不过可以通过第三方插件来简化这个问题,如:roadhog-api-doc#delay

    import { delay } from 'roadhog-api-doc';
    
    const proxy = {
      'GET /api/project/notice': getNotice,
      'GET /api/activities': getActivities,
      'GET /api/rule': getRule,
      'GET /api/tags': mockjs.mock({
        'list|100': [{ name: '@city', 'value|1-100': 50, 'type|0-2': 1 }]
      }),
      'GET /api/fake_list': getFakeList,
      'GET /api/fake_chart_data': getFakeChartData,
      'GET /api/profile/basic': getProfileBasicData,
      'GET /api/profile/advanced': getProfileAdvancedData,
      'POST /api/register': (req, res) => {
        res.send({ status: 'ok' });
      },
      'GET /api/notices': getNotices,
    };
    
    // 调用 delay 函数,统一处理
    export default delay(proxy, 1000);

    联调

    当本地开发完毕之后,如果服务器的接口满足之前的约定,那么只需要关闭 mock 数据或者代理到服务端的真实接口地址即可。

    npm run start:no-mock

    转自官方说明

    nhz94259@163.com
  • 相关阅读:
    中文编码问题
    TCP网络参数优化
    I/O的整体介绍
    TCP/IP
    Java序列化技术
    WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)
    λ(lambda)表达式
    HeapByteBuffer和DirectByteBuffer以及回收DirectByteBuffer
    锁的优化和注意事项
    java的NIO和AIO
  • 原文地址:https://www.cnblogs.com/nhz-M/p/10625064.html
Copyright © 2011-2022 走看看