【问题标题】: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.js 或module.android.js。
【解决方案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$"
}
...