codecamp

MorJS Mock 如何编写 Adapter

adapters 中配置的 adapter,会在 mock 初始化阶段中自动依次 importnew 对应的实例对象并执行 run 方法,adapterrun 需要返回一个结果用于优先替代后续的 mock 结果,若不返回或返回 undefined 则继续执行后续的 mock 流程,所以一个基本的 adapter 的结构如下:

export default class XXXAdapter {
  private options: Record<string, any>

  constructor(options) {
    this.options = options
  }

  public run(runOptions: IRunOptions) {
    // 执行相关逻辑 获取最终结果 result
    return result || undefined
  }
}

runOptions 参数

在 mock 初始化对应的实例对象后,自动调用的 run 方法会传一些固定的参数提供给开发者使用,runOptions 目前包含四个属性:

  • apiName: 调用的 JSAPI 名称,如 getSystemInfo request 等,开发者可以根据该属性选择介入哪些 JSAPI 的 mock 流程;
  • apiArguments: 调用的 API 的传参,例如调用 request 时的入参,可根据参数不同执行不会逻辑流程或返回不同结果;
  • originalGlobal: 小程序原生全局对象 如支付宝的 my(微信的 wx),该原生方法不会走 mock 流程避免 mock 嵌套死循环;
  • mockContext: webpack require 的 mock 目录结构,详情可参考 webpack - Dependency Management
export default class XXXAdapter {
  private options: Record<string, any>

  constructor(options) {
    this.options = options
  }

  public run(runOptions: IRunOptions) {
    const { apiName, apiArguments, originalGlobal, mockContext } = runOptions
    // 执行相关逻辑 获取最终结果 result
    return result || undefined
  }
}

adapter 传参

在如何使用 adapter 的时候说过,每个 adapter 支持 string 类型和 array 两种类型,想要给 adapter 传参必须使用 array 类型,第二个参数为传给 adapter 的参数,传入的参数可以在 constructoroptions 中获取

// mor.config.ts
export default defineConfig([
  {
    name: 'ali',
    target: 'alipay',
    ...,
    mock: {
      ...,
      adapters: [
        [
          // 参数①: 本地 adapter 或 npm 包名
          'your_adapter_name',
          // 参数②: 提供 adapter 的参数
          {
            type: 'your_parameter_type',
            api: 'your_parameter_api'
          }
        ],
      ],
    }
  },
])
// your_adapter_name/index.ts
export default class MtopAdapter {
  private options: Record<string, any>

  constructor(options) {
    this.options = options
  }

  public run(runOptions: IRunOptions) {
    const { apiName, apiArguments, mockContext, originalGlobal } = runOptions
    const {
      type, // your_parameter_type
      api // your_parameter_api
    } = this.options || {}
    // 执行相关逻辑 获取最终结果 result
    return result
  }
}
MorJS Mock 如何使用 Adapter
Morjs 如何设置环境变量
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

MorJS 指南

MorJS 基础用法

MorJS 配置

MorJS 编译相关配置

MorJS 进阶用法

MorJS Web开发

MorJS Web开发介绍

MorJS Web开发快速上手

MorJS Tabbar IOS 小黑条适配开关

MorJS 社区

MorJS 规范

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }