Implementing continuous integration (CI) for Expo end-to-end (E2E) testing is essential for maintaining high-quality mobile applications. Using GitHub Actions provides an automated and efficient way to run tests seamlessly whenever code changes are made. This article guides you through setting up CI for Expo E2E testing with GitHub Actions.

Understanding the Basics of Expo E2E Testing

Expo E2E testing involves simulating user interactions on a mobile app to ensure all features work as expected. Tools like Detox or Appium are commonly used for E2E testing in Expo projects. These tests verify the app’s functionality across different devices and environments, providing confidence before deployment.

Setting Up Your Expo Project for E2E Testing

Before integrating CI, ensure your Expo project is configured for E2E testing. Install necessary dependencies such as Detox:

  • Install Detox: npm install detox --save-dev
  • Configure detox in your package.json
  • Create E2E test scripts

Make sure your app can run in a test environment and that all tests pass locally before automating the process.

Creating a GitHub Actions Workflow for CI

Next, create a workflow file in your GitHub repository to automate E2E testing. This file should be located at .github/workflows/ci.yml.

name: Expo E2E CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  e2e-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Install dependencies
        run: npm install

      - name: Install Expo CLI
        run: npm install -g expo-cli

      - name: Build the app
        run: expo build:android --no-publish --no-dev --minify

      - name: Set up Android SDK
        uses: android-actions/setup-android@v2

      - name: Run E2E Tests
        run: |
          detox build -c android.emu.debug
          detox test -c android.emu.debug

Configuring Detox for CI Environment

Ensure Detox is configured to run in headless mode suitable for CI environments. Update your package.json with appropriate scripts and configurations:

{
  "scripts": {
    "test:e2e": "detox test -c android.emu.debug"
  },
  "detox": {
    "configurations": {
      "android.emu.debug": {
        "device": {
          "avdName": "Pixel_3a_API_30_x86"
        },
        "app": "path/to/your/app.apk"
      }
    }
  }
}

Best Practices for CI Integration

  • Use cache to speed up dependencies installation
  • Run tests in parallel where possible
  • Monitor build logs for failures and flaky tests
  • Secure secrets such as API keys and credentials using GitHub Secrets
  • Automate test reporting and notifications

Conclusion

Implementing CI for Expo E2E testing with GitHub Actions streamlines your development process, catching bugs early and ensuring high-quality releases. With proper setup and configuration, your team can enjoy faster feedback loops and more reliable app deployment cycles.