如何模拟反应原生I18nManager

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何模拟反应原生I18nManager相关的知识,希望对你有一定的参考价值。

我试图在本机中运行jest案例。我正在使用react-native-router-flux进行导航。我的测试用例因此错误而失败

Test suite failed to run

    TypeError: Cannot read property 'isRTL' of undefined

      at Object.<anonymous> (node_modules/react-native-router-flux/dist/NavBar.js:286:44)
      at Object.<anonymous> (node_modules/react-native-router-flux/dist/navigationStore.js:7:13)
      at Object.<anonymous> (node_modules/react-native-router-flux/dist/Reducer.js:74:36)

确切的线是transform:[{scaleX:_reactNative.I18nManager.isRTL?-1:1}]})

我尝试了不同的方法来模拟,但无法得到它

一种方法是

import {I18nManager} from 'react-native'

I18nManager = {
    isRTL : false
}

我把这个片段放在jest初始配置文件中,但是我得到了像I18nManager is readonly这样的错误

答案

实际上我使用的是运行的显式模块工厂,而不是使用Jest的自动锁定功能,即react-native-mock-render

像这样

jest.mock('react-native', () => require('react-native-mock-render'), {
  virtual: true
})

当我浏览这个lib代码时,我无法在模拟中找到I18nManager。所以我分叉了那个repo并自己添加了I18nManager文件。

以上是关于如何模拟反应原生I18nManager的主要内容,如果未能解决你的问题,请参考以下文章

将 Native App LTR 反应到 RTL 更改,而无需重新启动应用程序

如何从反应原生模拟 PermissionAndroid

如何从 Windows 测试 ios 上的反应原生应用程序?

对原生地理位置做出反应,而不是在 android 模拟器上询问用户权限

如何使用钩子在反应 i18next 中修复“未指定回退 UI”

在平板电脑上反应原生宽度