目前,React Native动态要求运行平台的文件具有特定的文件扩展名*.ios.js
或*.android.js
。但是,在测试环境中运行此代码时,我们会收到require
错误,因为在文件树中找不到模块require('./module')
,如下所示:
module.ios.js
module.android.js
我们如何在测试环境中处理这个问题?
答案 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,这可能会对您有所帮助: