В течение последних двух дней я искал хорошую настройку для использования Expo + Detox + CircleCI, чтобы приложение могло собираться во время процесса CI.
Локально, я могу заставить Экспо + Детокс работать, загрузив Exponent.app и поместив в мусорное ведро и запустив выставочный запуск (в другом терминале). Тем не менее, в Circle CI блокируется запуск выставки, поэтому существует эффективный способ добиться этого.
Я просмотрел множество примеров и не нашел ни одного четкого ответа с обновленными примерами, что является позором, если учесть, насколько популярной становится выставка.
Если у кого-нибудь есть пример файла CircleCI, которым вы могли бы поделиться, это было бы действительно здорово! Или, действительно, некоторая помощь в объяснении того, что может быть для достижения этой цели.
Я ценю, что это также вопрос для Детокса и CircleCI, но я подумал, что добавлю его сюда, так как многие могут захотеть узнать ответ?
Мой текущий код Circle-CI, который я искал назад и вперед, пытаясь найти решение, которое работает ...
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
defaults: &defaults
working_directory: ~/iynk-react-app
jobs:
test:
<<: *defaults
docker:
- image: circleci/node:10
steps:
- checkout
- run:
name: Update npm
command: 'sudo npm install -g npm@latest'
- run:
name: Install Firebase Tools
command: sudo npm install -g firebase-tools@latest
- restore_cache:
name: Restore Yarn Package Cache
keys:
- yarn-packages-{{ checksum "yarn.lock" }}
- run:
name: Install Dependencies
command: yarn install --frozen-lockfile
- save_cache:
name: Save Yarn Package Cache
key: yarn-packages-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
- run: yarn test
- run:
name: Install modules in functions
command: yarn --cwd ./functions --ignore-engines
e2e:
<<: *defaults
macos:
xcode: "10.2.1"
steps:
- run:
# Note: the [ character is necessary to uniquely identify the iPhone 8 simulator, as the phone + watch simulator is also present in the build image:
# Will show what looks like an error - Instruments Usage Error: Unknown device specified: "iPhone 8 (12.2) [") - but it launch
name: Pre-start simulator first to ensure that it is open
command: xcrun instruments -w "iPhone 8 (12.2) [" || true
- checkout
- restore_cache:
key: yarn-v1-{{ checksum "yarn.lock" }}-{{ arch }}
- restore_cache:
key: node-v1-{{ checksum "package.json" }}-{{ arch }}
- run: yarn install --ignore-engines
- save_cache:
key: yarn-v1-{{ checksum "yarn.lock" }}-{{ arch }}
paths:
- ~/.cache/yarn
- save_cache:
key: node-v1-{{ checksum "package.json" }}-{{ arch }}
paths:
- node_modules
- run:
name: Install applesimutils
command: |
brew tap wix/brew
brew install applesimutils
- run:
name: Install react-native, detox CLI and expo CLI
command: |
npm install -g react-native-cli
npm install -g detox-cli
npm install -g expo-cli
- run:
name: Prepare detox environment
command: |
detox clean-framework-cache &&
detox build-framework-cache
- run:
name: Download Exponent.app into bin
command: |
brew install wget
./scripts/setup.sh
# - run:
# name: Install the downloaded version of the expo iOS app on the Simulator
# command: |
# xcrun simctl install booted ./bin/Exponent.app
# - run:
# name: Login into Expo and publish to staging
# command: |
# npx expo login -u $EXPO_USERNAME -p $EXPO_PASSWORD
# npx expo publish --non-interactive --max-workers 1 --release-channel staging
- run:
name: Run expo locally using (&) Run detox tests
# shell: /bin/sh
command: |
yarn test:e2e &
expo start -c
workflows:
version: 2
build_and_test:
jobs:
- test
- e2e
Мои пакеты:
"detox": "12.3.0",
"detox-expo-helpers": "^0.6.0",
"expo-detox-hook": "^1.0.10",
Местные работы
Моя локальная установка запускается и тесты проходят. Это процесс на данный момент:
Убедитесь, что локальная среда настроена:
brew update
brew tap wix/brew
brew install --HEAD applesimutils
npm install -g detox-cli
Запустите скрипт установки:
./setup.sh
Тогда начинайте выставку.
expo start -c
Запустите симулятор, который вы планируете использовать для теста (поэтому, если вы выбрали iPhone X, запустите iPhone X и т. Д.). Вам не нужно запускать i
с выставки, просто откройте программу Simulator.
open -a Simulator.app
Наконец, запустите детокс-тесты с другого терминала с помощью:
yarn test:e2e
Известные проблемы
Я не думаю, что это связано с тем, что я могу заставить мою установку работать локально ...
ОБНОВЛЕНИЕ 2 июля 2019
Я смогу пройти тесты, если соберу в свой круг ci:
- run:
name: Login into Expo and publish to staging (could update with $CIRCLE_BRANCH)
command: |
npx expo login -u $EXPO_USERNAME -p $EXPO_PASSWORD --non-interactive
npx expo publish --non-interactive --max-workers 1 --release-channel testing
А затем в файл e2e / init.js загрузить из этого канала выпуска:
beforeAll(async () => {
await detox.init(config);
// Run from the remote build if in CI
if (__CI__) {
const url = 'exp://exp.host/@alexpchin/iynk?release-channel=testing';
await device.relaunchApp({ url, sourceApp: 'host.exp.exponent' });
await expect(element(by.label('Got it'))).toBeVisible();
await element(by.label('Got it')).tap();
}
});
Однако, если я использую это, я НЕ должен использовать reloadApp от detox-expo-helpers (в e2e / init.js):
beforeEach(async () => {
await adapter.beforeEach();
// If not CI, use `reloadApp` from `detox-expo-helpers`
if (!__CI__) {
await reloadApp();
}
});
Это, очевидно, очень медленно, потому что вам нужно создавать новую сборку каждый раз, когда вы хотите протестировать пользовательский интерфейс, а не запускать из кода ветви ...