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