Как заменить identity-obj-proxy для тестирования шутливых снимков изображениями

Когда я запускаю набор тестов Jest для своего проекта React Native (на базе Ignite Andross 2.1.0), я получаю следующую ошибку:

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"
    },

Насколько я знаю, это ожидаемое поведение identity-obj-proxy; он используется для замены всех операторов require(asset) в коде специальным объектом, который имитирует любой метод, с которым он вызывается; поэтому я не уверен, как поступить. Я понятия не имею, как мои операторы require() заменяются числами, когда мой код запускается в среде разработки (это сборщик Metro?), поэтому я не знаю, как предоставить эти числа свойству Image source при запуске Jest, чтобы правильно имитировать необходимые активы.

Я хотел бы получить ответ на этот вопрос, а также быстрое объяснение того, как/почему сборщик Metro (если это сборщик Metro) заменяет мои активы числами, поскольку сборщик плохо документирован. Спасибо!


person Johann Baptista    schedule 26.07.2018    source источник


Ответы (1)


Благодаря Стиву Келлоку из Infinte Red я смог найти решение проблемы: заменить identity-obj-proxy в package.json на более новый jest-transform-stub --- и да, именно Metro Bundler заменяет ресурсы изображения числами (хотя, если кому-то все еще интересно, мне было бы интересно услышать что-нибудь о том, как этот процесс работает под капотом).

person Johann Baptista    schedule 27.07.2018