五分钟实现,一个 RN App 开发调试工具

2020-05-10 18:55:08 +08:00
 rufeng008

在 React Native 开发过程中,做为开发人员,我们经常做着费力不“讨好”的事情,这样占用我们不少时间:

最后定位 bug 是后台数据问题:出现这种问题的根本原因是因为测试同学做的是“黑盒测试”,我们拿过来重现的步骤也是“黑盒验证”,这种测试方式不解决,上面那种尴尬的问题永远会存在。

怎么解决“黑盒测试”、“黑盒验证”问题呢?答案是:开放日志。 如果我们把 app 的数据流都展示在开发同学面前(至少把 http 请求数据流和基本日志输出开放),这样无论是测试同学还我们自己就能更容易的定位很大一部分 bug 的问题所在。

怎么“开放”这些日志?通过**react-native-debug-tool** 库,只需要几行代码就能实现一个开发调试工具,通过它,我们可以把我们想要“开放”的日志都以 UI 的形式随时随地展示出来。下面我们看看这个开发调试工具库能做什么:

先来看几张效果图:

可以看出普通日志,Http 请求,webView 的加载等都有详细的记录,因为数据一目了然,就不容易出现因为数据问题给 app 的 bug 的情况了,那我们集成这个开发工具会不会很复杂呢?

  1. 安装 npm install react-native-debug-tool --save or yarn add react-native-debug-tool
  2. 安装 react-native-root-siblings [若当前项目没有则需要安装些,目前只支持 3.x 版本]
  3. 显示调试工具浮点
import RootSibling from 'react-native-root-siblings';
DebugManager.showFloat(RootSibling)
  1. 记录 Http 请求日志:通过 DebugManager.appendHttpLogs() 记录
fetch(url, params).then((response) => {
   DebugManager.appendHttpLogs({url, ...params}, response)
})
  1. 记录 webView 日志:通过 DebugManager.appendWebViewLogs() 记录
<WebView source={{uri: url}}
         onNavigationStateChange={params => {
             DebugManagerDebugManager.appendWebViewLogs(params.url);
         }}
/>
  1. 记录普通日志:通过 DebugManager.appendLogs() 记录
static log(...args) {
    DebugManager.appendLogs(args.join(''))
}

就这样通过以上 6 步就能实现上面效果图中的所有功能了,是不是很简单,几分钟的时间就能搞定。以后,无论是测试同学还是开发人员都可以通过查看日志更方便的定位问题的 bug 在哪儿。

当然,前面有提到 app 的连接服务器环境切换的问题,这个实际上还得依赖于 app 的 Http 请求封装的实现,当前调试工具只提供一个服务器环境展示与选择功能,如图所示:

实现代码:

DebugManager.initDeviceInfo(DeviceInfo)
    .initServerUrlMap(serverUrlMap, RNStorage.baseUrl, (baseUrl) => {
        RFHttpConfig().initBaseUrl(baseUrl); // 重置 Http 请求 baseUrl 根据实际情况调用
        RNStorage.baseUrl = baseUrl;
        setTimeout(() => Alert.alert('环境切换', '服务器环境已经切换至' + baseUrl), 1000)
    });

注:当前设备信息的显示依赖于 'react-native-device-info' 库 需在调用页面引入依赖:import DeviceInfo from 'react-native-device-info';并把 DeviceInfo 传入到 DebugManager 的初始化参数中。

至此调试开发工具的所有功能就完全实现了,详细用例大家可以运行 示例 程序,一切就明了,欢迎朋友们 Star !

另外我还有一个开源项目,通过它可以极大的提高 RN 项目开发速度,大家有兴趣可以了解下:

如果有任何疑问,欢迎扫码加入 RN 技术 QQ 交流群

1355 次点击
所在节点    程序员
1 条回复
oxogenesis
2020-05-10 19:54:23 +08:00
nice

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX