When your test suite is finally ready, it should be set up to run automatically on your CI server on every git push. This will alert you if new changes to the app break existing functionality.
Running detox on CI is not that different from running it locally. There are two main differences:
- We will test a release build rather than a debug build
- We will tell Detox to shut down the simulator when test is over
We will need to create a release device configuration for Detox inside package.json
under the detox
section.
Example:
"detox": {
"configurations": {
"ios.sim.release": {
"binaryPath": "ios/build/Build/Products/Release-iphonesimulator/example.app",
"build": "xcodebuild -project ios/example.xcodeproj -scheme example -configuration Release -sdk iphonesimulator -derivedDataPath ios/build",
"type": "ios.simulator",
"name": "iPhone 7"
}
}
}
TIP: Notice that the name
example
above should be replaced with your actual project name.
Assuming your CI is executing some sort of shell script, add the following commands that should run inside the project root:
detox build --configuration ios.sim.release
detox test --configuration ios.sim.release --cleanup
TIP: Adding
--cleanup
to the test command will make sure detox exits cleanly by shutting down the simulator when the test is over.
Detox's own build is running on Travis, check out Detox's .travis.yml file to see how it's done.
This is a simple example configuration to get you started with Detox on Travis:
language: objective-c
osx_image: xcode8.3
branches:
only:
- master
env:
global:
- NODE_VERSION=stable
install:
- brew tap facebook/fb
- export CODE_SIGNING_REQUIRED=NO
- brew install fbsimctl --HEAD
- curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
- export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
- nvm install $NODE_VERSION
- nvm use $NODE_VERSION
- npm install -g react-native-cli
- npm install -g detox-cli
script:
- detox build --configuration ios.sim.release
- detox test --configuration ios.sim.release --cleanup