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

Testing React Native的测试平台特定扩展代码,testing,react-native,jestjs,Testing,React Native,Jestjs,当前,React Native Dynamics需要运行平台的文件扩展名为*.ios.js或*.android.js。但是,在测试环境中运行此代码时,我们会得到一个require错误,因为在文件树中找不到模块require('./module'),如下所示: module.ios.js module.android.js 我们如何在测试环境中处理这些问题?这有点难看,也许有更好的解决方案,但似乎您可以创建一个module.js文件,将在测试中使用,但在平台环境中,它仍将使用module.io

当前,React Native Dynamics需要运行平台的文件扩展名为
*.ios.js
*.android.js
。但是,在测试环境中运行此代码时,我们会得到一个
require
错误,因为在文件树中找不到模块
require('./module')
,如下所示:

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

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

这有点难看,也许有更好的解决方案,但似乎您可以创建一个
module.js
文件,将在测试中使用,但在平台环境中,它仍将使用
module.ios.js
module.android.js
您需要创建一个自定义编译器,以解决测试中特定于平台的依赖项。如果您正在使用摩卡咖啡,这可能会帮助您:


从Jest 17.0.0开始,您可以使用
defaultPlatform
配置进行此操作-请参阅Jest React Native的最底层

如图所示,您可以进行如下配置:

"haste": {
  "defaultPlatform": "ios",
  "platforms": ["android", "ios"],
},
当然,这意味着您的测试只加载组件的iOS版本(或者只加载Android,取决于您选择如何配置它)

如果您发现测试这两个版本很重要,您可能需要做一些更像本期中提到的解决方案的事情,可能需要操作
Platform.OS
并直接使用
require.requireActual


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

moduleFileExtensions添加特定于平台的扩展
修复了我在
jest.14.1
中遇到的问题。归功于:

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

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