Раздел тестирования документов для React Native предполагает, что Jest является официальным способом проведения модульных тестов. Однако они не объясняют, как настроить его. Запуск Jest без какой-либо установки дает синтаксические ошибки (без номеров строк:(), потому что он не применяет преобразования (например, функции ES6, JSX и поток), которые, как правило, используют React Native. Там находится папка jestSupport
в React Исходный источник пытается содержать env.js
и scriptPrerocess.js
, последний имеет код для применения преобразований. Поэтому я скопировал их в свой проект и добавил следующий раздел в свой пакет package.json:
"jest": {
"scriptPreprocessor": "jestSupport/scriptPreprocess.js",
"setupEnvScriptFile": "jestSupport/env.js"
},
Это исправляет первую ошибку, но я все равно получаю следующую ошибку:
Using Jest CLI v0.4.0
FAIL js/sync/__tests__/SynchronisedStorage-tests.js
SyntaxError: /Users/tom/my-project/js/sync/__tests__/SynchronisedStorage-tests.js: /Users/tom/my-project/js/sync/SynchronisedStorage.js: /Users/tom/my-project/node_modules/react-native/Libraries/react-native/react-native.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/browser/ui/React.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/utils/ReactChildren.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/addons/ReactFragment.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/classic/element/ReactElement.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/core/ReactContext.js: /Users/tom/my-project/node_modules/react-native/node_modules/react-tools/src/vendor/core/warning.js: Unexpected token .
1 test failed, 0 tests passed (1 total)
Run time: 0.456s
Есть ли еще что мне нужно сделать, чтобы Jest понял React Native? Есть ли примеры установки Jest для тестирования React Native?
EDIT:
В scriptPreprocess
произошла проверка, которая помешала ему запустить какой-либо файл в node_modules
, который, конечно же, включал всю React Native. Удаление, которое исправляет ошибку выше. Однако теперь я получаю больше ошибок от источника React Native, он определенно кажется, что он не предназначен для запуска в Jest.
EDIT2:
Явная настройка макета для модуля react-native
работает:
jest.setMock('react-native', {});
Похоже, что это будет очень ручным и не очень полезно для тестирования кода, который много взаимодействует с React Native API. Я определенно все еще чувствую, что мне что-то не хватает!