Подтвердить что ты не робот

Тестовый код расширения для React Native

В настоящее время React Native динамически требует наличия файла для рабочей платформы с определенным расширением файла, *.ios.js или *.android.js. Однако при запуске этого кода внутри тестовой среды мы получаем ошибку require, потому что модуль require('./module') не может быть найден в дереве файлов, который выглядит так:

  • module.ios.js
  • module.android.js

Как мы можем справиться с этими проблемами в тестовой среде?

4b9b3361

Ответ 1

Добавление дополнительных расширений платформы к moduleFileExtensions устраняет проблему для меня с помощью jest.14.1. Кредиты на: ссылка github

Вот фрагмент из примера package.json, который будет запускать все файлы, включая scene.jest.js(x).

...
"jest": {
    "verbose": true,
    "preset": "jest-react-native",
    "moduleFileExtensions": ["js", "android.js", "ios.js"],
    "testRegex": "\\.scene\\.jest\\.jsx$"
  }
 ...

Ответ 2

По состоянию на Jest 17.0.0 вы можете использовать конфигурацию defaultPlatform для этого - см. самую нижнюю часть Jest React Native tutorial.

Как там показано, вы должны настроить что-то вроде этого:

"haste": {
  "defaultPlatform": "ios",
  "platforms": ["android", "ios"],
},

Естественно, это будет означать, что ваши тесты загружают только версию iOS вашего компонента (или только Android, в зависимости от того, как вы ее настроите).

Если вы считаете важным протестировать обе версии, вам, вероятно, нужно будет сделать что-то более похожее на решение, упомянутое в этой проблеме, возможно, манипулируя Platform.OS и используя require.requireActual напрямую.

(Возможно, также захочется отследить этот вопрос, если в итоге будет найдено менее хакерское решение.)

Ответ 3

Это довольно уродливое и, возможно, лучшее решение, но кажется, что вы можете создать файл module.js, который будет использоваться в тестах, но в среде платформы он все равно будет использовать module.ios.js или module.android.js.

Ответ 4

Вам необходимо создать настраиваемый компилятор для разрешения зависимых от платформы зависимостей в тестах. Если вы используете мокко, это, вероятно, поможет вам:

http://lidatang.com/setup-mocha-testing-react-native/