Jest.js 测试平台特定的React Native扩展代码

dfty9e19  于 2023-04-03  发布在  Jest
关注(0)|答案(4)|浏览(121)

目前,React Native动态地需要一个具有特定文件扩展名*.ios.js*.android.js的文件用于运行平台。然而,当在测试环境中运行此代码时,我们得到一个require错误,因为在文件树中找不到模块require('./module'),看起来像:

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

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

uqdfh47h

uqdfh47h1#

moduleFileExtensions添加特定于平台的扩展解决了我使用jest.14.1时遇到的问题。感谢:github链接
下面是示例package.json的一个片段,它将运行所有文件,包括scene.jest.js(x)。

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

68bkxrlz2#

从Jest 17.0.0开始,你可以使用defaultPlatform配置来实现这一点--请参阅Jest React Native教程的最底部。
如图所示,您可以配置如下内容:

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

当然,这意味着你的测试只加载iOS版本的组件(或者只加载Android版本,这取决于你选择如何配置它)。
如果您发现测试两个版本都很重要,那么您可能需要执行类似于this issue中提到的解决方案,可能需要操作Platform.OS并直接使用require.requireActual
(可能还需要跟踪this问题,以防最终找到一个不那么麻烦的解决方案。

iqjalb3h

iqjalb3h3#

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

rqenqsqc

rqenqsqc4#

您需要创建一个自定义编译器来解决测试中的平台特定依赖项。如果您正在使用mocha,这可能会帮助您:
http://lidatang.com/setup-mocha-testing-react-native/

相关问题