如何用图像替换identity-obj-proxy以进行开玩笑的快照测试

时间:2018-07-26 21:29:25

标签: image react-native mocking jestjs snapshot

当我为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捆绑器)如何/为什么用数字替换我的资产,因为捆绑器的文献很少。谢谢!

1 个答案:

答案 0 :(得分:0)

借助Infinte Red的Steve Kellock,我能够找到解决问题的方法:将identity-obj-proxy中的package.json替换为较新的jest-transform-stub ---是的,它是使用数字替换图像资产的Metro Bundler(尽管仍然有人感兴趣,但我很想知道有关该过程在后台的工作方式)。