Я взглянул на приложение и смог заставить его работать. Я установил следующее в моих devDependencies.
"devDependencies": {
...
"jest": "23.2.0",
"detox": "8.0.0"
...
},
В package.json я также добавил
"detox": {
"configurations": {
"ios.sim.debug": {
"binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/BoomApp.app",
"build": "xcodebuild -project ios/BoomApp.xcodeproj -scheme BoomApp -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
"type": "ios.simulator",
"name": "iPhone 7"
}
},
Я бегал detox init -r jest
После этого я смог распознать, когда был отображен определенный экран, и сделал это, добавив testID в ScrollView LoginScreenBlur.js (строка 23)
<AppWrapper>
<ScrollView contentContainerStyle={{flex: 1}} testID={'login_screen'}>
....
</ScrollView>
</AppWrapper>
A, затем в e2e/firstTest.spec.js
я заменил тесты на
it('should have loginScreen', async () => {
await expect(element(by.id('login_screen'))).toBeVisible();
});
Это был мой консольный ответ после запуска detox build && detox test
node_modules/.bin/jest e2e --config=e2e/config.json --maxWorkers=1 --testNamePattern='^((?!:android:).)*$'
server listening on localhost:64579...
: Searching for device matching iPhone 7...
: Uninstalling org.reactjs.native.example.BoomApp...
: org.reactjs.native.example.BoomApp uninstalled
: Installing /Users/work/Downloads/react-native-ui-kitten-demo-app-master/ios/build/Build/Products/Debug-iphonesimulator/BoomApp.app...
: /Users/work/Downloads/react-native-ui-kitten-demo-app-master/ios/build/Build/Products/Debug-iphonesimulator/BoomApp.app installed
: Terminating org.reactjs.native.example.BoomApp...
: org.reactjs.native.example.BoomApp terminated
: Launching org.reactjs.native.example.BoomApp...
7: org.reactjs.native.example.BoomApp launched. The stdout and stderr logs were recreated, you can watch them with:
tail -F /Users/work/Library/Developer/CoreSimulator/Devices/AF406169-5CF3-4480-9D00-8F934C420043/data/tmp/detox.last_launch_app_log.{out,err}
PASS e2e/firstTest.spec.js (7.935s)
Example
✓ should have loginScreen (1499ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 8.87s, estimated 9s
Ran all test suites matching /e2e/i with tests matching "^((?!:android:).)*$".
Казалось бы, приложение по умолчанию запускает LoginScreenBlur, поэтому имеет смысл сначала протестировать его, а не LoginScreenMaterial.
Одна вещь, которую я заметил, состоит в том, что приложение использует RKTextInput
и RkButton
, это не нативные компоненты, а обертки вокруг нативных компонентов. Это означает, что вам нужно будет передать testID собственному компоненту, который вы хотите иметь testID. Я не уверен, поддерживает ли react-native-ui-kitten
метки специальных возможностей, поэтому может потребоваться дополнительная работа, если вы хотите автоматизировать ввод текста и нажатие кнопок.
Добавление testID к пользовательским компонентам
См. Шаг 3 https://github.com/wix/detox/blob/master/docs/Introduction.WritingFirstTest.md
Обратите внимание, что не все компоненты React поддерживают эту опору. Большинство встроенных встроенных компонентов в React Native, таких как View, Text, TextInput, Switch, ScrollView, имеют поддержку. Если вы создадите свои собственные составные компоненты, вам придется вручную распространить эту подпорку на правильный собственный компонент.
Более подробное объяснение добавления testID к пользовательским компонентам приведено здесь https://github.com/wix/detox/blob/master/docs/Troubleshooting.RunningTests.md#cant-find-my-component-even-though-i-added-testid-to-its-props
Вкратце, вы должны реализовать свой пользовательский компонент следующим образом.
Пользовательский компонент
export class MyCompositeComponent extends Component {
render() {
return (
<TouchableOpacity testID={this.props.testID}>
<View>
<Text>Something something</Text>
</View>
</TouchableOpacity>
);
}
}
Использование пользовательского компонента
Тогда вы должны использовать это так.
render() {
return <MyCompositeComponent testID='MyUniqueId123' />;
}
Поиск по иерархии
Если вы выполнили все вышеперечисленное и уверены, что ваш элемент имеет правильный testID и тесты по-прежнему не проходят, вы можете найти его в иерархии представлений https://github.com/wix/detox/blob/master/docs/Troubleshooting.RunningTests.md#debug-view-hierarchy
Я не буду повторять вышеупомянутый пост полностью, но шаги
- Запустите в вашем симуляторе отладочное приложение (не сборку релиза)
- Открыть Xcode
- Присоедините Xcode к процессу вашего приложения
- Нажмите кнопку Иерархия просмотра отладки
- Это откроет средство просмотра иерархии и покажет разбивку иерархии представлений вашего приложения. Здесь вы можете просмотреть виды
- Реагировать Родные testIDs проявляются как идентификаторы доступности в иерархии собственного представления