Testing Strategy
E2E, native module tests, visual regression, and release gates for Expo SDK 56 apps.
Key takeaways
- SDK 56 testing spans six layers from TypeScript and component tests up to native (XCTest, JUnit/Robolectric), visual diff, and release (EAS Build/Update/Observe).
- The PR gate runs
expo-doctor,expo install --check, tests, and lint; SDK upgrade PRs also need the Router codemod and an iOS 16.4+ QA matrix. - E2E must cover Hermes V1 cold launch, OTA relaunch with bytecode diff, deep link entry, offline-to-online, payment/auth, and MDM managed config changes.
- Expo UI and widgets use real native controls, so snapshots are not enough; capture Live Activities on simulator and device and log package versions.
- Release gates progress from preview build through production binary to OTA 1/10/100% with crash-free 99.5%+ and TTI P95 regression under 10%.
Test Pyramid
SDK 56 apps need more than JS tests. Hermes V1, native modules, Expo UI, EAS Update, and Observe instrumentation all affect the production runtime.
| Layer | Tool | Verifies |
|---|---|---|
| TypeScript | Vitest/Jest | domain logic, route helpers, native wrapper fallback |
| Component | React Native Testing Library | state, accessibility labels, pending UI |
| E2E | Maestro or Detox | login, purchase, offline, deep link |
| Native | XCTest, JUnit/Robolectric | Expo Modules wrapper, entitlement, permission |
| Visual | screenshot diff | Expo UI, widgets, Dynamic Type, dark mode |
| Release | EAS Build/Update/Observe | binary, OTA, rollout health |
PR Gate
npx expo-doctor
npx expo install --check
pnpm test
pnpm lintSDK upgrade PRs also need:
npx expo install --fixreflected in the lockfile.- Expo Router SDK 55 to 56 codemod or manual import audit.
- QA matrix updated for iOS 16.4+.
- CI image on Node 22.13.x or later.
- EAS preview builds passing on both platforms.
E2E Scenarios
| Scenario | Reason |
|---|---|
| first install and cold launch | Hermes V1 and Observe TTR/TTI baseline |
| relaunch after OTA | bytecode diff and runtimeVersion compatibility |
| deep link entry | Expo Router import migration impact |
| offline then online | Observe dispatch, update check, cache behavior |
| payment and auth | native SDK wrapper and secure storage |
| MDM managed config change | enterprise distribution target |
Expo UI and Widgets Regression
- Expo UI uses real native controls; snapshots are not enough.
- Include Dynamic Type, dark mode, RTL, screen reader, and hardware keyboard coverage.
- Capture iOS Widgets and Live Activities on simulator and real devices.
- Log package versions because changelog and API reference labels can differ.
Release Gate
| Stage | Pass criteria |
|---|---|
| preview build | QA install, smoke E2E, native permission prompts confirmed |
| production binary | store metadata, signing, crash symbol upload confirmed |
| OTA 1% | crash-free 99.5%+, TTI P95 regression under 10% |
| OTA 10% | support ticket and backend error rates normal |
| OTA 100% | rollback point recorded, changelog updated |