首页 > 解决方案 > 如何用图像替换用于开玩笑快照测试的 identity-obj-proxy

问题描述

当我为我的 React Native 项目(由 Ignite Andross 2.1.0 提供支持)运行 Jest 测试套件时,我收到以下错误:

console.error node_modules/fbjs/lib/warning.js:33

警告:道具类型失败:提供给“图像”的道具“来源”无效。在图像中(由 ConvoCard 创建)在 ConvoCard 中在视图中(由组件创建)在组件中

错误的根源是我应该将 png 文件传递​​给组件ConvoCard,作为sourcereact-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 捆绑器)如何/为什么用数字替换我的资产,因为捆绑器的文档很少。谢谢!

标签: imagereact-nativemockingjestjssnapshot

解决方案


感谢 Infinte Red 的 Steve Kellock,我能够找到解决问题的方法:用更新的替换identity-obj-proxy---package.jsonjest-transform-stub的,它是 Metro Bundler 用数字替换图像资产(尽管如果有人还在有兴趣,我会很想听到有关该过程如何在幕后工作的任何信息)。


推荐阅读