排毒(Android):device.reloadReactNative 失败

Posted

技术标签:

【中文标题】排毒(Android):device.reloadReactNative 失败【英文标题】:Detox(Android): device.reloadReactNative fails 【发布时间】:2018-11-11 15:25:30 【问题描述】:

场景

我正在尝试使用 detox 为 react-native 项目测试一个 android 应用程序。 在 detox 之外的设备或模拟器上运行应用程序时,一切正常。

生成排毒构建后,当我运行排毒测试命令时,该应用程序已成功安装并在模拟器上打开。在测试中通过beforeEach 调用device.reloadReactNative 时,应用程序崩溃并出现以下错误。 我将测试文件和相应的详细 adb logcat 输出放在 gist here 中。

无论出于何种原因,AppRegistry.js 都没有被加载,否则模块应该是已知的(参见错误)。

总结一下:

在 detox (ios+android) 之外构建和应用执行工作 detox 构建工作 (ios+android) 排毒测试适用于 ios 在 android 上运行 detox 测试时,调用 reloadReactNative 后 AppRegistry 丢失。为什么?

环境

react-native-cli: 1.3.0 反应原生:0.55.3 react-native-navigation: 1.1.457 排毒服务器:7.0.0 排毒:7.3.7 OSX:10.13.4 XCode:9.2

命令

detox test --configuration android.emu.release --cleanup -l verbose

错误

INSTRUMENTATION_RESULT: longMsg=com.facebook.react.common.javascriptException:模块 AppRegistry 不是注册的可调用模块(调用 运行应用程序)

Thrown here 因为AppRegistry 尚未注册到 MessageQueue 的模块列表。

【问题讨论】:

【参考方案1】:

Detox 与 React Native Navigation v1 存在兼容性问题。这可能永远无法解决,因为 Wix 已经弃用 v1 而支持 v2。

您可以迁移到 v2 或使用 v1➜v2 adapter。 Detox 已经在 React Native Navigation v2 上进行了测试,实际上,RNNv2 e2e 测试套件在两个平台上都使用了 Detox。

【讨论】:

以上是关于排毒(Android):device.reloadReactNative 失败的主要内容,如果未能解决你的问题,请参考以下文章

排毒动画设置

排毒 - 无法初始化类 DefaultKotlinSourceSetKt

排毒构建成功,但排毒测试失败

由于在应用程序安装期间超时而无法运行排毒测试

使用 by.text 进行排毒子字符串匹配

排毒测试 - 如何禁用排毒信息记录到标准输出