当我为我的 React Native 项目(由 Ignite Andross 2.1.0 提供支持)运行 Jest 测试套件时,我收到以下错误:
console.error node_modules/fbjs/lib/warning.js:33
警告:道具类型失败:提供给“图像”的道具“来源”无效。在图像中(由 ConvoCard 创建)在 ConvoCard 中在视图中(由组件创建)在组件中
错误的根源是我应该将 png 文件传递给组件ConvoCard
,作为source
react-nativeImage
组件的道具,但在测试环境中,该资产已损坏。
经过一番挖掘,我能够看到当我正常运行 react-native 时,所需的资产控制台记录到一个数字,而当我运行测试套件时,它控制台记录到一个空对象,因为这条线在我的package.json
文件中,它使用identity-obj-proxy
:
"moduleNameMapper": {
"^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "identity-obj-proxy"
},
AFAIK,这是预期的行为identity-obj-proxy
;它用于用require(asset)
模拟任何调用它的方法的特殊对象替换代码中的所有语句;所以我不确定如何进行。我不知道require()
当我的代码在开发环境中运行时我的语句是如何被数字替换的(那是 Metro 捆绑器吗?),所以我不知道如何Image
source
在运行 Jest 时将这些数字提供给属性,以正确模拟所需的资产。
我很想回答这个问题,以及快速解释 Metro 捆绑器(如果它是 Metro 捆绑器)如何/为什么用数字替换我的资产,因为捆绑器的文档很少。谢谢!