Ensure Node is 8.3.0 or higher.
Install applesimutils
:
brew tap wix/brew brew install applesimutils
Install detox-cli:
npm install -g detox-cli
yarn add detox detox-expo-helpers expo-detox-hook
"detox": { "configurations": { "ios.sim": { "binaryPath": "bin/Exponent.app", "type": "ios.simulator", "name": "iPhone 7" } } }
…and to the scripts object:
"scripts": { "e2e": "detox test --configuration ios.sim" }
Fetch the IPA file from here
Fetch/copy files from Github
A basic example of incorporating some useful detox calls:
const { reloadApp } = require('detox-expo-helpers'); describe('Login flow', () => { beforeEach(async () => { await reloadApp(); }); it('should login successfully', async () => { await device.reloadReactNative(); await expect(element(by.id('email'))).toBeVisible(); await element(by.id('email')).typeText('john@example.com'); await element(by.id('password')).typeText('123456'); await element(by.text('Login')).tap(); await expect(element(by.text('Welcome'))).toBeVisible(); await expect(element(by.id('email'))).toNotExist(); }); });
The element can be selected by making the most of using the testId
— for example, the following test button has ID hello_button
:
<TouchableOpacity testID="hello_button" onPress={this.onButtonPress.bind(this, 'Hello')} > <Text style={{ color: 'blue', marginBottom: 20 }}>Say Hello</Text> </TouchableOpacity>
Finally, to run the test we can run yarn start
in one terminal and yarn e2e
on the other to run the e2e
script. Note that you need to have live reload disabled, so better to also put the app into production mode before running the e2e tests. This can be done from the terminal following the instructions to set production mode.
You may need to add the --reuse
flag to the e2e
script. At the time of writing, the current version 0.55 is having issues on iOS with hanging. The requirement at the moment is that you have to open and close the Expo window. See this GitHub issue for more info