2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dockerでテスト用のDBコンテナを作成してテストできるようにする

2
Posted at

Dockerでテスト用PostgreSQLコンテナを作る場合、開発用DBとは別にテスト専用コンテナを用意する方法があります。

docker-compose.yml(テスト用DB追加)

開発用とテスト用を分離した構成例:

  postgres: # 開発用PostgreSQL(既存)
    image: postgres:18
    container_name: laravel_postgres
    environment:
      POSTGRES_DB: laravel_dev
      POSTGRES_USER: laravel_user
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - postgres_dev_data:/var/lib/postgresql

  postgres-test:   # テスト用PostgreSQL(新規追加)
    image: postgres:18
    container_name: laravel_postgres_test
    environment:
      POSTGRES_DB: laravel_test
      POSTGRES_USER: test_user
      POSTGRES_PASSWORD: test_pass
    ports:
      - "5433:5432"  # 開発用とポート差別化
    volumes:
      - postgres_test_data:/var/lib/postgresql

volumes:
  postgres_dev_data:
  postgres_test_data:

.env.testing設定

.encv.testing
textDB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=laravel_test
DB_USERNAME=test_user
DB_PASSWORD=test_pass

phpunit.xml設定

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="DB_CONNECTION" value="pgsql"/>
    <env name="DB_HOST" value="localhost"/>
    <env name="DB_PORT" value="5432"/>
    <env name="DB_DATABASE" value="laravel_test"/>
    <env name="DB_USERNAME" value="test_user"/>
    <env name="DB_PASSWORD" value="test_pass"/>
</php>

運用手順

# コンテナ起動(開発用+テスト用)
docker-compose up -d

# テスト用DB確認
docker ps

# appコンテナに入る
docker exec -it laravel_app bash

# マイグレーション(テスト環境)
php artisan migrate --env=testing

# テスト実行
php artisan test

🚨 Docker + Laravel テストDB接続の落とし穴と解決法 🚨

私の場合、appコンテナでDB接続をハードコードしていたので、.env.testing無視されていました。

services:
  app:
    environment:
      - DB_HOST=postgres
      - DB_DATABASE=laravel_dev
    # → php artisan test → 開発用DBに接続 

テスト実行しても → localhost:5432(開発用DB)に繋がってしまいます。

解決策として、シンプルにappコンテナ内で指定している、environmentを削除すると、.env.testingの中身を見てくれるようになりました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?