测试工具Preset说明

# Preset preset有`name`和`content`两个属性,`content`包含了主要的逻辑,`name`仅作为标识。 # `content` content中写js的函数体,执行preset的时候会将该函数返回的值作为message通过websocket发送到服务器。 该函数当前提供参数同时会放到ctx变量中,提供参数如下: **变量** - **md5** - md5函数库,参考[md5 npm](https://www.npmjs.com/package/md5) - **user** - 当前用户信息 - **room** - 当前房间信息 - **messages** - 当前房间的ws消息数组 - **preset** - 当前的preset对象 - **token** - 当前用户的登录token - **env** - 将之前收到的message parse成object 通过`Object.assign(env, ...)`缓存起来的变量,同时可以调用`setEnv`进行修改, .e.g:例如收到两条roomMsg, msgBody会保存最新的一条的msgBody - **this** - 该页面组件的vm实例 **方法** - **request**: 封装了axios,会自动插入当前用户的token到`headers.authorization`,会自动对参数执行`qs.stringify` - `request(url: String, data: Object):Promise` - **sendAndReceive**: 通过发送数据包的方式来获得数据 - `sendAndReceive(options: Object):Promise` - `@params {string} options.cmd` - `@params {object} options.data` - ws包的参数 - `@params {string} options.receiveCmd` - 接收数据的cmd,默认是填入的cmd - `@params {number} options.timeout` - 超时时间,默认2000(ms) - `@return Promise` - 返回Promise,返回内容是第一个cmd为`receiveCmd`的ws数据包 - **getRoomInfo**: - 封装了`sendAndReceive`方法,发送`{cmd: 'roomInfo'}`,然后获得第一个返回的cmd为`roomInfo`的ws的数据包 - `getRoomInfo():Promise` - `@return Promise` - **select**: 让用户选择提供的多个选项中的一个 - `select(options):Promsie` - `@params {array} options.datas` - 多个选项,任意内容 - `@params {object} options.props` - 指定选项中用于展示图片的字段和展示文字描述的字段,默认均为空,表示使用对象本身 - `@params {string} options.props.name` - 展示文字描述的字段名 - `@params {string} options.props.image` - 展示图片的字段名 - `@params {string | number} options.width` - dialog的宽度 - **setEnv**: 缓存临时的环境变量,在不同的preset之间可以通用,实际上执行了`Object.assign(this.env, arguments[0])` - `setEnv(env):void` # 下面是送礼物给房主的preset的例子,这个例子只测试了前端,真正发送礼物的接口并没有调用 - ctx.request 发送ajax请求获得所有礼物配置 - 对礼物配置预处理后通过 ctx.select获得用户选择的礼物类型 - 然后通过ctx.getRoomInfo 获得房主的信息 - 最后发送礼物信息 ```javascript return ctx.request('/api/giftConfigs').then(res=>res.data.list).then(gifts=>{ let datas = gifts.map(g=>{g.img = 'https://shengjian-1258861966.image.myqcloud.com/gift/' + g.img;return g}) return ctx.select({ datas, props: { name: 'name', image: 'img' } }).then(item=>{ let gift = item.option return ctx.getRoomInfo().then(info=>{ return { "msgBody": { "tip": "", "giftInfo": { "receiver": info.seats.master.user.nickname, "receiverId": info.seats.master.user._id, ...gift }, "messageId": Date.now() + '', "msgTime": Date.now(), "userInfo": ctx.user, "messageType": 2, "isPrivate": false }, "roomid": ctx.room._id, "cmd": "roomMsg", } }) }) }) ```