如何用图像替换 identity-obj-proxy 以进行开玩笑的快照测试
How to replace identity-obj-proxy for jest snapshot testing with images
当我 运行 我的 React Native 项目(由 Ignite Andross 2.1.0 提供支持)的 Jest 测试套件时,我收到以下错误:
console.error node_modules/fbjs/lib/warning.js:33
Warning: Failed prop type: Invalid prop 'source' supplied to 'Image'.
in Image (created by ConvoCard)
in ConvoCard
in View (created by Component)
in Component
错误的根源是我应该将 png 文件传递到组件 ConvoCard
,作为 react-native Image
组件的 source
道具, 但在测试环境中,此资产已损坏。
经过一番挖掘,我发现当我 运行 正常反应本机时,所需的资产控制台登录到一个数字,当我 运行 测试套件时,它控制台记录到一个空对象,因为我的 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"
},
据我所知,这是 identity-obj-proxy
的预期行为;它用于将代码中的所有 require(asset)
语句替换为一个特殊对象,该对象模拟调用它的任何方法;所以我不确定如何进行。我不知道当我的代码在开发环境中是 运行 时,我的 require()
语句是如何被数字替换的(那是 Metro 捆绑器吗?),所以我不知道如何提供这些数字Image
source
属性,当 运行ning Jest 时,正确模拟所需的资产。
我很想回答这个问题,以及对 how/why Metro 捆绑器(如果它是 Metro 捆绑器)正在用数字替换我的资产的快速解释,因为捆绑器的文档很少。谢谢!
感谢 Infinte Red 的 Steve Kellock,我找到了解决问题的方法:用更新的 jest-transform-stub
替换 package.json
中的 identity-obj-proxy
--- 是的,用数字替换图像资产的是 Metro Bundler(尽管如果有人仍然感兴趣,我很想听听有关该过程如何在引擎盖下工作的任何消息)。
当我 运行 我的 React Native 项目(由 Ignite Andross 2.1.0 提供支持)的 Jest 测试套件时,我收到以下错误:
console.error node_modules/fbjs/lib/warning.js:33
Warning: Failed prop type: Invalid prop 'source' supplied to 'Image'. in Image (created by ConvoCard) in ConvoCard in View (created by Component) in Component
错误的根源是我应该将 png 文件传递到组件 ConvoCard
,作为 react-native Image
组件的 source
道具, 但在测试环境中,此资产已损坏。
经过一番挖掘,我发现当我 运行 正常反应本机时,所需的资产控制台登录到一个数字,当我 运行 测试套件时,它控制台记录到一个空对象,因为我的 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"
},
据我所知,这是 identity-obj-proxy
的预期行为;它用于将代码中的所有 require(asset)
语句替换为一个特殊对象,该对象模拟调用它的任何方法;所以我不确定如何进行。我不知道当我的代码在开发环境中是 运行 时,我的 require()
语句是如何被数字替换的(那是 Metro 捆绑器吗?),所以我不知道如何提供这些数字Image
source
属性,当 运行ning Jest 时,正确模拟所需的资产。
我很想回答这个问题,以及对 how/why Metro 捆绑器(如果它是 Metro 捆绑器)正在用数字替换我的资产的快速解释,因为捆绑器的文档很少。谢谢!
感谢 Infinte Red 的 Steve Kellock,我找到了解决问题的方法:用更新的 jest-transform-stub
替换 package.json
中的 identity-obj-proxy
--- 是的,用数字替换图像资产的是 Metro Bundler(尽管如果有人仍然感兴趣,我很想听听有关该过程如何在引擎盖下工作的任何消息)。