# 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]>
e2e Tests on Expo Simulators Example
An Expo app with five e2e tests by TesterArmy. The tests run on the simulator on your computer, on Expo Simulators with no Mac or Android SDK, and in EAS Workflows on every pull request.
The form uses Expo UI universal components, so the tests drive SwiftUI on iOS and Jetpack Compose on Android instead of React Native views.
Launch your own
🚀 How to use
npx create-expo --example with-e2e
cd with-e2e
Use Node 22.12 or later. The app needs a build. Expo Go does not run it.
Run the tests on your computer
| Platform | Build and install | Run the tests |
|---|---|---|
| iOS | npm run ios:release |
npm run test:e2e:ios |
| Android | npm run android:release |
npm run test:e2e:android |
| Web | npx playwright install chromium once. The runner starts Expo. |
npm run test:e2e:web |
For native builds, follow Expo's setup guide. Start a simulator or emulator before you build. Rebuild after app changes. Results are in .e2e/report.json.
Run the tests on Expo Simulators
Expo Simulators is in limited access. Check your account:
npx eas-cli@latest simulator:availability
Link the project and make a simulator build with the e2e profile:
npx eas-cli@latest init
npx eas-cli@latest build --platform ios --profile e2e
Then run the suite with the build id. The provider leases a hosted simulator, EAS installs the build on it, and the tests drive it:
E2E_IOS_BUILD_ID=<build id> npm run test:e2e:ios
Android works the same way with --platform android and E2E_ANDROID_BUILD_ID. The provider authenticates with EXPO_TOKEN or your eas login. Each session takes about three minutes to start and counts toward your account's limits. See e2e's EAS Simulators guide for the options.
Run the tests in EAS Workflows
.eas/workflows/e2e.yml builds the app for iOS and Android, then runs the suite on Expo Simulators from Linux runners. It runs on every pull request and on pushes to main.
One-time setup:
- Connect the GitHub repository to the EAS project.
- Add
EXPO_TOKEN, a robot token with access to the project, as a secret in thepreviewEAS environment. - Optional: add
AI_GATEWAY_API_KEYto the same environment to run the agent tests.
Run it by hand:
npx eas-cli@latest workflow:run .eas/workflows/e2e.yml
The tests
tests/deterministic.e2e.ts finds elements by testID and checks the greeting and the empty-name error. tests/agentic.e2e.ts gives an agent a goal in plain language, then checks the result with a locator. The agent tests need a Vercel AI Gateway key. Without it, they skip:
AI_GATEWAY_API_KEY="your-key" npm run test:e2e:ios
Coding agents: read AGENTS.md before changing the screen or the tests.
📝 Notes
- Using e2e by TesterArmy
- Expo Simulators
- EAS Workflows
- Expo UI and Liquid Glass
- Expo skills for coding agents
Last checked on 2026-10-29 with Expo SDK 58.


