Files
2cc7a440b0 Add with-e2e: e2e tests on Expo Simulators and EAS Workflows (#715)
# Why

TesterArmy is adding Expo to the [e2e
showcase](https://e2e.tester.army/examples) and asked for an Expo
example that runs on Expo Simulators. This folder is that example. The
showcase lists it by folder URL, so it lives here and installs with `npx
create-expo --example with-e2e`.

# How

- One screen: a greeting form built with `@expo/ui` universal components
inside a `GlassView` from `expo-glass-effect`, with native tabs. A
second tab explains the tests.
- The five tests from TesterArmy's with-expo starter: three locator
tests and two agent tests that skip without `AI_GATEWAY_API_KEY`.
- `e2e.config.ts` has `ios`, `android`, and `web` targets. With
`E2E_IOS_BUILD_ID` or `E2E_ANDROID_BUILD_ID` set, the mobile targets run
on Expo Simulators through `@e2e-dev/eas`. Without them, they drive the
local simulator or emulator. The web target lets the runner pick a free
port.
- `eas.json` adds an `e2e` build profile. `.eas/workflows/e2e.yml`
builds both platforms and runs the suite on Expo Simulators from Linux
runners.
- `AGENTS.md` tells coding agents to install the Expo skills and which
skill to use for the screen, Expo Simulators, and the workflow.

# Test Plan

- [x] `tsc --noEmit` and `eslint .` pass.
- [x] Fresh install of the folder (from this branch, since `create-expo
--example` reads master), then the README steps: `npm run ios:release`
and `npm run test:e2e:ios` on an iPhone 17 simulator (iOS 26.5). Three
locator tests pass, the agent tests skip without a key.
- [x] `npm run test:e2e:web` in the fresh install: three pass.
- [x] `npm run android:release` and `npm run test:e2e:android` on a
Pixel 9 emulator (Android 16): three pass.
- [ ] The agent tests with a model key.
- [ ] A run on Expo Simulators with an `e2e` profile build
(`E2E_IOS_BUILD_ID`).
- [ ] `eas workflow:validate` and one workflow run. Both need the
project linked with `eas init`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5.1 <[email protected]>
Co-authored-by: Tori Expo <[email protected]>
2026-10-30 18:34:37 +00:00

47 lines
1.3 KiB
JSON

{
"name": "with-e2e",
"version": "1.0.0",
"main": "expo-router/entry",
"dependencies": {
"@expo/ui": "~58.0.25",
"expo": "~58.0.21",
"expo-constants": "~58.0.14",
"expo-glass-effect": "~58.0.5",
"expo-linking": "~58.0.15",
"expo-router": "~58.0.28",
"expo-splash-screen": "~58.0.12",
"expo-status-bar": "~58.0.4",
"expo-system-ui": "~58.0.7",
"react": "19.3.0",
"react-dom": "19.3.0",
"react-native": "0.88.1",
"react-native-gesture-handler": "~3.3.0",
"react-native-safe-area-context": "~5.10.1",
"react-native-screens": "~4.30.0",
"react-native-web": "~0.21.4"
},
"devDependencies": {
"@e2e-dev/eas": "~0.3.2",
"@e2e-dev/mobile": "~0.12.4",
"@e2e-dev/web": "~0.15.3",
"@types/node": "~26.6.6",
"@types/react": "~19.3.0",
"ai": "~7.0.156",
"e2e": "~0.21.3",
"playwright": "~1.64.1",
"typescript": "~6.0.3"
},
"scripts": {
"start": "expo start",
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
"ios:release": "expo run:ios --configuration Release --no-bundler",
"android:release": "expo run:android --variant release --no-bundler",
"test:e2e:ios": "e2e run --target ios",
"test:e2e:android": "e2e run --target android",
"test:e2e:web": "e2e run --target web"
},
"private": true
}