Continuous Integration (CI) is an essential practice in modern software development, enabling teams to automatically test and validate their code changes. For Flutter developers, integrating CI with unit tests ensures that code remains reliable and bug-free as the project evolves. This step-by-step guide walks you through setting up CI for Flutter projects with a focus on running unit tests automatically.

Prerequisites

  • A Flutter project set up on your local machine
  • Git installed and a remote repository (e.g., GitHub, GitLab)
  • An account with a CI service (e.g., GitHub Actions, GitLab CI, CircleCI)
  • Basic knowledge of Flutter and Git commands

Step 1: Write Unit Tests in Your Flutter Project

Ensure your Flutter project includes unit tests to validate your code. Typically, tests are placed in the test directory. Here is an example of a simple unit test:

test/example_test.dart

import 'package:flutter_test/flutter_test.dart';

void main() {
  test('Sample test', () {
    expect(2 + 2, equals(4));
  });
}

Step 2: Configure Your CI Workflow

Create a configuration file for your CI service. For example, if using GitHub Actions, add a .github/workflows/flutter_ci.yml file:

name: Flutter CI

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

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.7.0'

      - name: Install dependencies
        run: flutter pub get

      - name: Run unit tests
        run: flutter test

Step 3: Commit and Push Your Changes

After configuring your CI workflow, commit your changes and push to your remote repository:

git add .
git commit -m "Set up CI for Flutter unit tests"
git push origin main

Step 4: Verify the CI Pipeline

Navigate to your CI service dashboard to see the pipeline run. If everything is configured correctly, your unit tests will execute automatically on each push or pull request. Check the logs for any failures and address issues as needed.

Best Practices for CI with Flutter

  • Keep your unit tests fast and reliable.
  • Run tests on multiple Flutter versions if possible.
  • Integrate code coverage reports to monitor test effectiveness.
  • Automate other checks like linting and formatting.
  • Regularly update your CI configuration as your project evolves.

Implementing CI for your Flutter project ensures continuous quality and faster development cycles. By automating unit tests, you can catch bugs early and maintain a robust codebase.