2.4.1 • Published 5 years ago

macondo-mock v2.4.1

Weekly downloads
4
License
ISC
Repository
github
Last release
5 years ago

macondo-mock

macondo 是百年孤独中的一个地名,译作马孔多

本地的一种接口 mock 方案,在得到接口的 swagger 文档之后生成本地 mock 接口服务,方便本地调试使用。

使用场景

  1. 服务端接口定义好了,但是没有具体实现好或是不能调用的时候,用本地 mock 代替。
  2. 查询类数据,服务端接口数据可能不够充足,不方便页面调试,本地 mock 就能很好解决。
  3. 在离线环境、网络不稳定的情况下方便调试。

使用

安装

可在项目中安装,也可全局安装,推荐项目内部安装。

yarn add macondo-mock

用法

如果全局安装,进入到项目,终端运行 macondo-mock,在项目内使用可以在 package.json 中加入一个 scripts

{
    "scripts": {
        "mock": "macondo-mock"
    }
}

也可以免安装使用,支持 npx 的环境可直接在项目路径下:

npx macondo-mock

默认会在项目中生成一个 mock 目录,里面包含 swaggerschema 文件夹,并且提示缺少必要文件错误,在 swagger 文件夹中加入复制出来的 swagger 文档,如userInfo.sg。 再次调用脚本,就能自动生成 schema 文件以及 db.json 文件。访问 http://localhost:3000/userInfo 就能调用接口,注意这里的 接口命名是根据swagger文件名来命名 的。

如果需要产生多层目录的接口,可以在 swagger 文件夹下面加入对应的文件夹,这样就能根据文件夹名称生成多级目录。

例子:

/swagger/search.sg -> http://localhost:[port]/search

/swagger/path1/list.sg -> http://localhost:[port]/path1/list

/swagger/path1/path2/detail.sg -> http://localhost:[port]/path1/path2/detail

配置化

macondo-mock 是高度可配置化,如同babeltypescriptjest 的配置文件一样,可以在 package.json 中加入 "macondo-mock" 字段,或者是新建 macondo-mockrc.yamlmacondo-mockrc.ymlmacondo-mockrc.jsonmacondo-mockrc.jsmacondo-mock.config.js 写入配置项。 同时包含了默认设置,可做到开箱即用。

配置项

  • baseOption
  • schemaOption
  • dbOption
  • serverOption

baseOption

fileds类型默认值解释
mockPathstring./mockmock 文件生成的路径

schemaOption

fields类型默认值解释
forcebooleanfalse出现和 swagger 文档中同名的 schema 文件时,是否强制生成
globalIglobal见下基础类型配置, 配置全局 string 类型 mock
surmiseArray<Isurmise> & Isurmise见下自定义类型推断, 根据正则匹配字段名去微调 mock 类型
recursiveDepthnumber3如果结果存在循环体,自递归层数

Iglobal:

export interface Iglobal {
        number?: string
        array?: string
        string?: string
        boolean?: string
    }

默认值如下:

const global = {
            number: '@integer(1, 10000)',
            string: '@csentence',
            boolean: '@boolean',
            array: '@integer(0, 10)'
        }

Isurmise:

export interface Isurmise {
    test: string
    mock?: string | {regexp: string}
    data?: string
    length?: number
}

这里的 test 的内容是正则字符串,内部是通过 new Regexp(test) 返回的正则去匹配字段名。


dbOption

fileds类型默认值解释
forcebooleantrue是否每次启动脚本都去生成 db.json 文件

serverOption

fileds类型默认值解释
portnumber3000本地服务的端口号
interfaceNamestringundefined根据字符串匹配生成接口名

interfaceName 的规则和 webpackoutputname 字段类似,举个例子,传入[name].json,那么生成的接口名字最后会替换掉 [name] 内容。


schema 字段解释

schema 文件夹下的文件是生成最后的 db.json 的规则:

字段解释
type类型
commentswagger 文档中的注释
optional字段值是否可选
mock需要 mock 出来的数据类型, 如果 typearray 类型,mock 返回值是数组长度
data如果指定了 data 值,就直接忽略 mock 项生成的值
genericstypearray 的话,generics 是数组子项的数据类型

其中 mock 项还可以传入一个对象,传入正则(正则内容需要转义)生成假数据:

{
    "mock": {
        "regexp": "\\d{11}"
    }
}

获取 mock 类型

假数据由 mockjs 生成,需要更改预设值,直接修改 schema.json 文件的 mock 字段。

默认 mock 类型

类型默认值 mock解释示例
string@csentence一般字符串"白高长正深常究厂影常小际么知影证。"
number@integer(1, 10000)一般数字729
boolean@boolean布尔值true
array.length@integer(0, 50)数组的长度38
/\w*(?:[dD]ate)|(?:[tT]ime)\w*/@datetime符合正则的时间类型"2014-02-18 20:33:40"
/\w*[iI]d$/@increment符合正则的 id,保证 id 不重复"2014-02-18 20:33:40"
/\w*[Nn]ame$/@cnamename
/^province(?:Name)?$/@province省份
/^city(?:Name)?$/@city城市
/\w*[pP]ics?|\w*[pP]ictures?|\w*[iI]mgs?|\w*[iI]mages?/@image图片
/\w*[cC]ode$/@string("lower", 5)code
/\w*[pP]hone(?:Number)?/{"regexp": "\\d{11}"}手机号

常用 mock 类型

默认的 mock 类型不可能在所有场景都能很好使用,这里列举常用的 mock 类型:

mock解释返回示例
@pick(["a", "e", "i", "o", "u"])在一个枚举值中随机挑选一个值,常用语状态之类的字段e
@region返回一个区域华北
@province返回一个省份河北省
@city返回一个城市菏泽市
@city(true)返回一个带省份的城市浙江省 宁波市
@county返回一个区、县长宁区
@city(true)返回完整的区县北京 北京市 海淀区
@email返回随机邮箱t.npqzluvzg@yoz.tk
@url返回随机 url 地址"http://nscgpruo.su/plfjwr"
@cname返回随机中文姓名康艳
@cword( pool?, min?, max? )返回限定的随机长度的随机中文字符在院门
@cparagraph( min?, max? )返回限定的随机长度的中文段落构标号住石见关包往再声亲严证千度真。五增上已每法流确京北改开总农圆。如群省志然料且史好比物质达低长天门。第里中型研装果其内等土调号了存机见七。查已问回江员求子育属世式土党速。
@image( size?, background?, foreground?, format?, text? )返回一个图片地址"http://dummyimage.com/200x100/FF6600"
@id生成一个身份证号360000201905197112

覆盖默认 mock 数据

对于基本类型的数据,给 data 字段赋值就能覆盖mock数据,数组长度只需覆盖 length字段就能固定长度。

用例

点击这里查看使用用例。

注意事项

自动生成的 db.json 是做为最直接数据源生成接口数据,由于所有的接口全部生成在这个 json 文件中,这个文件会非常大,避免直接去修改 db.json 来改动接口数据。 如需固定某个字段返回值,可在 schema.json 文件对该字段的 data 字段修改为需要固定的数据。


默认schema.json、db.json数据只会生成一次

2.4.1

5 years ago

2.4.0

5 years ago

2.3.0

5 years ago

2.2.3

5 years ago

2.2.2

5 years ago

2.2.1

5 years ago

2.1.0

5 years ago

2.0.5

5 years ago

2.0.4

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago