针对React Native的测试平台特定扩展代码

时间:2016-04-07 14:23:54

标签: testing react-native jestjs

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

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

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

4 个答案:

答案 0 :(得分:2)

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

以下是示例package.json的一个片段,它将运行包括scene.jest.js(x)在内的所有文件。

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

答案 1 :(得分:1)

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

正如它所示,您可以配置如下内容:

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

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

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

(可能还想跟踪this问题,以防最终找到一个不太苛刻的解决方案。)

答案 2 :(得分:0)

这有点难看,也许有更好的解决方案,但似乎你可以创建一个将在测试中使用的module.js文件,但在平台环境中它仍然会使用module.ios.js或{ {1}}。

答案 3 :(得分:0)

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

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