当我为React Native项目(由Ignite Andross 2.1.0支持)运行Jest测试套件时,出现以下错误:
console.error node_modules / fbjs / lib / warning.js:33
警告:道具类型失败:提供给“图片”的道具“源”无效。 在图像中(由ConvoCard创建) 在ConvoCard中 在视图中(由组件创建) 在组件中
错误的根源是,我应该将png文件传递给组件ConvoCard
,作为本机source
组件的Image
道具,但是在测试环境中,该资产已损坏。
经过一番挖掘,我能够看到,当我正常运行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 bundler吗?),所以我不知道如何将这些数字提供给{{ 1}} Image
属性,在运行Jest时可以正确模拟所需的资产。
我想回答这个问题,并快速解释一下Metro捆绑器(如果是Metro捆绑器)如何/为什么用数字替换我的资产,因为捆绑器的文献很少。谢谢!
答案 0 :(得分:0)
借助Infinte Red的Steve Kellock,我能够找到解决问题的方法:将identity-obj-proxy
中的package.json
替换为较新的jest-transform-stub
---是的,它是使用数字替换图像资产的Metro Bundler(尽管仍然有人感兴趣,但我很想知道有关该过程在后台的工作方式)。