✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Testing Compose Profiles

Testing Compose Profiles involves validating Docker configurations across environments, ensuring consistency and reliability in containerized applications

Testing Compose profiles group together services specifically needed for running an application's automated test suite — test runners, test-specific data seeding, isolated test databases — tagged with a profile so they're activated specifically in a testing context without affecting ordinary development or production usage.

Tagging Test-Specific Services

A testing-oriented profile groups together everything specifically needed to run the test suite.

services:
  api:
    build: .
  test-runner:
    build: .
    command: npm test
    profiles:
      - testing
    depends_on:
      - test-db
  test-db:
    image: postgres:16
    profiles:
      - testing
    environment:
      - POSTGRES_DB=test_db

Both test-runner and test-db only start when the testing profile is explicitly activated, keeping them out of an ordinary development or production startup.

Running Tests Through This Profile

A CI pipeline (or a developer running tests locally) explicitly activates this profile to bring up everything the test suite needs.

docker compose --profile testing up --abort-on-container-exit test-runner

The --abort-on-container-exit flag stops the whole Compose application once test-runner exits, appropriate for a CI context where the test run's completion should end the entire process.

Why an Isolated Test Database Matters

Using a separate, test-specific database service (rather than reusing the application's normal development database) avoids tests inadvertently affecting data outside the dedicated test context.

services:
  test-db:
    image: postgres:16
    profiles:
      - testing

Cleaning Up After a Test Run

Tearing down the testing-specific services and their data after a test run keeps the environment clean for the next run.

docker compose --profile testing down -v

Why Testing Compose Profiles Matter

Cleanly separating test-specific infrastructure through a dedicated profile keeps automated testing well-isolated and repeatable, without cluttering ordinary development or production usage with services that exist purely to support the test suite.