JS Mock开发

1. 基础

  • API所在目录:
    interface/sdk-js/api

  • JS Mock所在目录:
    third_party/jsframework/runtime/main/extend/systemplugin/napi

  • 背景
    当前ACE JS应用在DevEco中的PC预览运行环境仅包含ACE子系统代码,不包含其他子系统代码,所以当前无法提供与真机上类似的JS API的功能。
    为了避免开发者在使用JS API时引起页面报错或阻塞页面显示等问题,需要将对应的JS API在Pc预览上进行mock,使得开发者在js中实现的逻辑可以继续执行。
    注意:JS预览器功能依赖于电脑显卡的OpenGL版本,OpenGL版本要求为3.2及以上。(通常桌面云上的版本较低,请使用PC验证)

  • 注意事项
    蓝区代码一定要在蓝区环境push到gitee,在黄区push是典型的信息安全违规操作,如没有蓝区环境,请与对应接口华为方人员联系。不要在黄区push!不要在黄区push!不要在黄区push!

2. 实现

  • JS API Mock开发文档: link
2.1 新建文件(如无)
  1. 在third_party/jsframework/runtime/main/extend/systemplugin/napi目录下增加对应的js文件,文件命名格式与dts文件保持一致。
    例如@ohos.accessibility.d.ts则其对应的js文件名为ohos_accessibility.js

2.2 实现接口
  • JS API Mock时,原则是对应对象的成员变量和成员函数要与d.ts文件保持一致

  • 接口日志打印需要保持格式一致,为:
    console.warn(‘xxx.xxx interface mocked in the Previewer. How this interface works on the Previewer may be different from that on a real device.’);

  • 此处xxx需要替换为对应的对象名称和接口名称,且大小写需要与d.ts文件保持一致。避免在PC预览上提示开发者当前接口被mock时,造成疑惑。如:

  • 如果成员变量的属性非基本属性则需先实现自定义属性的定义,在完成该成员属性的定义

class

export的使用,在d.ts中含有class需被其他对象调用其属性值,使用关键字export修饰class

7.3 基本类包含属性和方法

namespace
namespace
2.3 实现返回值

3.JS API Mock时,JS API返回值和异步回调函数的入参,promise的入参要与d.ts文件定义保持一致。
3.1 AysncCallback函数的入参实现,data:T为void类型
在d.ts文件中的定义:
输入图片说明
在mock中的实现:
输入图片说明
3.2 AysncCallback函数的入参实现,data:T非void类型
在d.ts文件中的定义:
输入图片说明
在mock中的实现:
输入图片说明
注意:无论是哪种异步回调函数入参都需要和d.ts文件中定义保持一致
3.3 Callback函数的入参实现,data:T非void类型
在d.ts文件中的定义:
输入图片说明
在Mock中的实现:
输入图片说明
3.3 promise的入参实现(可对照3.1和3.2实例比较):
在d.ts文件中的定义:
输入图片说明
在Mock中的实现:
输入图片说明
4.如果子系统下面包含多级目录,如mutimedia下面有多个插件media、image等,可以按照dts文件分成多个js文件:
输入图片说明
5.枚举类型作为返回参数时,或者作为回调入参,promise入参时不能直接定义为object。如:
输入图片说明
建议定义为 const osAccountTypeMock = "[PC Preview] unknown OsAccountTypeMock"返回,如果能够确定对应接口里面的枚举返回值,可以返回对应值的mock。
6.枚举类型有作为函数入参时,为防止开发者作为入参使用枚举值时,PC预览不能识别具体枚举参数而报错,需要枚举类型在mock代码中定义。如在d.ts中定义的枚举为:
输入图片说明
mock中增加对应的枚举定义:
输入图片说明
7.class类型定义和实现:
JS API Mock实现class定义需要和d.ts中定义保持一致:
7.1 基本类的定义和实现
在d.ts中的定义:
输入图片说明
在Mock中的定义和实现,要注意静态属性的定义,放在class外:
输入图片说明
7.2 子类的定义和实现:
输入图片说明
在Mock中的定义和实现,在子类继承父类中,super作为函数调用,只能写在子类的构造函数(constructor)里,super代表的是父类的构造函数:
输入图片说明
7.3 基本类包含属性和方法
在d.ts中的定义:
输入图片说明
在Mock中的定义和实现:
输入图片说明
7.4 定义接口(interface)的实现

2.4 枚举类型

3. 验证

3.1 验证环境
  1. 使用DevEco Studio 3.0 Beta1及以上版本(使用API9)
    蓝区DevEco获取地址: link

  2. 当前验证的功能为DevEco提供的PC预览功能,不依赖任何真机环境,在PC环境下DevEco中运行,请确认验证环境。

3.2 编译替换SDK
  1. 下载代码后第一次编译,需要下载预编译二进制工具链
    ./build/prebuilts_download.sh

  2. 删除之前目录
    rm -fr out/sdk/ohos-sdk/windows/previewer/common

  3. 编译PC预览动态库
    ./build.sh --product-name ohos-sdk

  4. 替换SDK
    Openharmony SDK,将编译PC预览动态库中编译出来的out/sdk/ohos-sdk/windows/previewer/common下所有内容替换到DevEco中使用的SDK路径下的previewer/5.x.x.x/common目录下。

  5. 替换后白屏
    编译PC预览动态库中编译出来的out/sdk/ohos-sdk/windows/ets或js目录下的三个文件夹,需要替换DevEco使用的SDK路径下ets/或js/5.x.x.x(ide版本会显示不同)/目录下,注意,只替换这几个文件夹不替换对应路径下的配置文件,然后在ets/或js/5.x.x.x(ide版本会显示不同)/build-tools/ets-load目录下执行npm install

2.1.5 提交代码
1.代码提交前,需要自查格式,确保格式没有问题
2.蓝区mock代码需要加入版权头(如果是对2021的mock内容修改改为2021-2022,如果是2022新增mock文件,则改为2022)

3.代码提交前, 需按照d.ts自检补充3.2测试验收三点要求。在蓝区提交的代码一定要在蓝区自验证,并且发给胡益锁wx1119949review时要附上提交链接和对应的d.ts文件链接以及蓝区自验证截图。review完成后,找黄施昱00369912合入
4.代码提交步骤参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E8%B4%A1%E7%8C%AE%E6%B5%81%E7%A8%8B.md 需要符合对应的代码编程规范然后按照贡献流程提交代码。
5.代码需要在蓝区提交至https://gitee.com/openharmony/third_party_jsframework的master分支, API8的需要先合入master后合入3.1release分支,API9的需要合入master分支

3.测试验收
Mock相关规范可以参考JS API Mock扫描规范:https://gitee.com/huyisuo/third_party_jsframework/wikis/JS%20API%20Mock%20%E6%89%AB%E6%8F%8F%E8%A7%84%E8%8C%83
JS API 是已评审过的d.ts为准编写的JS Moc代码。验收时,应以d.ts为准,在PC预览上使用对应的JS API,执行到对应逻辑时确认以下三点:
1.接口类型实现与d.ts定义一致,即:同步接口、异步回调接口,promise接口等。
2.日志打印提示开发者当前接口时被mock,与真机环境存在差异。
3.接口返回或回调参数数据结构与d.ts一致,保证基本的数据结构框架,数据内容可能与真机存在差异。

fsf

在jsframework代码仓(third_party/jsframework目录下)编写JS API Mock代码,JS API Mock主要分成以下两种情况:
1.1.通过NAPI机制将c++ api封装成JS API(Openharmony框架使用)

注意,在实现对应的JS API方法是,需要在方法中打印日志,提示开发者,当前接口在PC预览场景下被mock,提示日志格式为: console.warn(‘xxx.xxx interface mocked in the Previewer. How this interface works on the Previewer may be different from that on a real device.’);
例如:third_party/jsframework/runtime/main/extend/systemplugin/napi目录下增加ohos_zlib.js文件,则此处xxx需要对应替换为对应接口名称如:zlib.zipFile。
输入图片说明
2.将实现的JS API Mock添加到third_party/jsframework/runtime/main/extend/systemplugin/napi/index.js文件中,以便PC预览时,通过requireNapi调用该API Mock。
输入图片说明
1.3.实现JS API Mock过程中需要注意的地方
tips:为保证dts文件和mock文件的高度统一性,故此在命名中强调以下规范:
最外层的export function统一命名为mockxxx,其次mock的定义对象和接口要与d.ts文件包括大小写保持一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值