【问题标题】:Test platform specific extension code for React NativeReact Native 的测试平台特定扩展代码
【发布时间】:2016-07-28 12:13:21
【问题描述】:

目前,React Native 动态地要求运行平台的文件具有特定的文件扩展名,*.ios.js*.android.js。但是,在测试环境中运行此代码时,我们会收到 require 错误,因为在文件树中找不到模块 require('./module'),如下所示:

  • module.ios.js
  • module.android.js

我们如何在测试环境中处理这个问题?

【问题讨论】:

    标签: testing react-native jestjs


    【解决方案1】:

    这有点难看,也许有更好的解决方案,但似乎您可以创建一个module.js 文件,用于测试,但在平台环境中它仍将使用module.ios.jsmodule.android.js

    【讨论】:

      【解决方案2】:

      您需要创建一个自定义编译器来解决测试中特定于平台的依赖关系。如果您使用的是 mocha,这可能会对您有所帮助:

      http://lidatang.com/setup-mocha-testing-react-native/

      【讨论】:

        【解决方案3】:

        从 Jest 17.0.0 开始,您可以为此使用 defaultPlatform 配置 - 请参阅 Jest React Native tutorial 的最底部。

        正如它在那里显示的那样,您可以这样配置:

        "haste": {
          "defaultPlatform": "ios",
          "platforms": ["android", "ios"],
        },
        

        当然,这意味着您的测试仅加载您的组件的 iOS 版本(或仅加载 Android 版本,具体取决于您选择如何配置它)。

        如果您发现测试这两个版本很重要,您可能需要做一些类似于this 问题中提到的解决方案,可能会操纵Platform.OS 并直接使用require.requireActual

        (可能还想跟踪this 问题,以防最终找到不那么老套的解决方案。)

        【讨论】:

          【解决方案4】:

          moduleFileExtensions 添加特定于平台的扩展为我解决了jest.14.1 的问题。致谢:github link

          这是来自示例package.json 的 sn-p,它将运行所有文件,包括 scene.jest.js(x)。

          ...
          "jest": {
              "verbose": true,
              "preset": "jest-react-native",
              "moduleFileExtensions": ["js", "android.js", "ios.js"],
              "testRegex": "\\.scene\\.jest\\.jsx$"
            }
           ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-26
            • 2015-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-25
            • 1970-01-01
            相关资源
            最近更新 更多