pbmock

1.0.3 • Public • Published

pbmock

以前的痛点

1、联调开发阻塞,前端只能自己手写假数据 2、长短文本、空数据等测试不全面 3、需求周期结束后,其他人接受,发现再无数据,没有测试号?测试号没数据?debug痛苦,还要找后台配置假数据。

pbmock所做的工作

1、解析pb协议,自动生成mock数据 2、支持pb协议多种字段类型,嵌套message、enum等,基本覆盖所有语法。(暂不支持extend) 3、丰富的配置项,允许用户对响应数据做额外配置

Getting started

npm install pbmock --save-dev

Usage

quick start:


const mocker = require("pbmock")
var data = mocker({
    cmd:"GetUserDataReq",
    entry:path=>path.resolve(__dirname,"./pb/admin.proto"),
}) 

// return data 

Options

cmd : string

pb文件中需要查找的命令字,如果你需要动态mock命令字的话,可以这样使用:

mocker({
    cmd:`${request.query.path}Rsp`,
    ...
})

entry : string | function

指定入口pb文件,允许提供字符串或函数,若为字符串请提供绝对路径。

disabled : boolean

是否禁用mocker

whiteList : Array

命令字白名单,默认无配置,则所有传入的命令字都会mock,不做过滤。 若需要配置,请配置需要mock的命令字,以字符串数组的形式传入。

mocker({
    whiteList:[
        'getDataRsp',
        'getDataRsp',
        'getDataRsp',
    ],
    ...
})

times : number

若pb文件中存在返回数组的情况,可通过times设置数组项数,此配置针对全局。

logger : boolean

是否输出日志,

configureType : Object < key: dataType , value: any | function >

针对数据类型进行定制,mocker内默认对int、float、string等类型有相应的mock数据配置,但是这不一定满足你的需求,例如你想返回的int数据是介于0-1000的,你期待的string长度不超过50等,可以单独配置。 若value配置为函数形式,默认注入Mock对象,用于辅助用户生成随机数据,更多用法可翻阅mockjs文档。

mocker({
    configureType:{
        "int32":mock=>{
            return mock.Random.integer(0,100)
        },
        "string":"oleiwa"
    },
    ...
})

注:dataType为pb文件中所定义的普通类型值,包括:"bool","double","float","int32", "uint32","int64","uint64","sint32","sint64","fixed32", "fixed64","sfixed32","sfixed64","string","bytes"。

hook :Object < key: cmd , value : function >

如果configureType仍然不能满足你的需求,mocker还暴露了hook配置,用于对每个单独的命令字做单独配置。 key为对应的命令字,value为相应的钩子函数,函数中将暴露两个参数,第一个参数为mocker生成的data,第二个参数为Mock对象,辅助配置。 例如响应的请求固定code为0,表示成功,你可以配置如下:

hook:{
    "StModifyGameOpenRankInfoRsp":(source,Mock)=>{
        source.code = 0;
    }
},

exposeVar : Object

可传入一个需要暴露给mocker的对象,并结合intercept使用,截断请求。

intercept : function

后置钩子函数,可用于响应请求。配置后,将在mock data完成后调用。传入的第一参数为用户配置的exposeVar参数,第二个参数为mock后的data,可在该函数中响应请求。

mocker({
    exposeVar:{
        req,
        res,
    },
    intercept:({req,res},data)=>{
        res.send(data)
    }
    ...
})

十分重要的注意事项

如果你的node中间层,即你的后台是基于TSW的,请这样引入pbmock

window.disable()
const mocker = require("@tencent/pbmock")
context.window.enable()

(原因:TSW中暴露了window对象,导致protobufjs判断不在nodejs环境下,不执行解析)

Readme

Keywords

Package Sidebar

Install

npm i pbmock

Weekly Downloads

0

Version

1.0.3

License

MIT

Unpacked Size

270 kB

Total Files

30

Last publish

Collaborators

  • jacksonzeng