目前,React Native动态地需要一个具有特定文件扩展名*.ios.js或*.android.js的文件用于运行平台。然而,当在测试环境中运行此代码时,我们得到一个require错误,因为在文件树中找不到模块require('./module'),看起来像:
*.ios.js
*.android.js
require
require('./module')
module.ios.js
module.android.js
我们如何在测试环境中处理这些问题?
uqdfh47h1#
向moduleFileExtensions添加特定于平台的扩展解决了我使用jest.14.1时遇到的问题。感谢:github链接下面是示例package.json的一个片段,它将运行所有文件,包括scene.jest.js(x)。
moduleFileExtensions
jest.14.1
package.json
"jest": { "verbose": true, "preset": "jest-react-native", "moduleFileExtensions": ["js", "android.js", "ios.js"], "testRegex": "\\.scene\\.jest\\.jsx$" }
68bkxrlz2#
从Jest 17.0.0开始,你可以使用defaultPlatform配置来实现这一点--请参阅Jest React Native教程的最底部。如图所示,您可以配置如下内容:
defaultPlatform
"haste": { "defaultPlatform": "ios", "platforms": ["android", "ios"], },
当然,这意味着你的测试只加载iOS版本的组件(或者只加载Android版本,这取决于你选择如何配置它)。如果您发现测试两个版本都很重要,那么您可能需要执行类似于this issue中提到的解决方案,可能需要操作Platform.OS并直接使用require.requireActual。(可能还需要跟踪this问题,以防最终找到一个不那么麻烦的解决方案。
Platform.OS
require.requireActual
iqjalb3h3#
这有点难看,也许有一个更好的解决方案,但似乎你可以创建一个module.js文件,将在测试中使用,但在平台环境中,它仍然会使用module.ios.js或module.android.js。
module.js
rqenqsqc4#
您需要创建一个自定义编译器来解决测试中的平台特定依赖项。如果您正在使用mocha,这可能会帮助您:http://lidatang.com/setup-mocha-testing-react-native/
4条答案
按热度按时间uqdfh47h1#
向
moduleFileExtensions
添加特定于平台的扩展解决了我使用jest.14.1
时遇到的问题。感谢:github链接下面是示例
package.json
的一个片段,它将运行所有文件,包括scene.jest.js(x)。68bkxrlz2#
从Jest 17.0.0开始,你可以使用
defaultPlatform
配置来实现这一点--请参阅Jest React Native教程的最底部。如图所示,您可以配置如下内容:
当然,这意味着你的测试只加载iOS版本的组件(或者只加载Android版本,这取决于你选择如何配置它)。
如果您发现测试两个版本都很重要,那么您可能需要执行类似于this issue中提到的解决方案,可能需要操作
Platform.OS
并直接使用require.requireActual
。(可能还需要跟踪this问题,以防最终找到一个不那么麻烦的解决方案。
iqjalb3h3#
这有点难看,也许有一个更好的解决方案,但似乎你可以创建一个
module.js
文件,将在测试中使用,但在平台环境中,它仍然会使用module.ios.js
或module.android.js
。rqenqsqc4#
您需要创建一个自定义编译器来解决测试中的平台特定依赖项。如果您正在使用mocha,这可能会帮助您:
http://lidatang.com/setup-mocha-testing-react-native/