Как в symfony doctrine правильно пролить фикстуры в тест окружении внутрь Docker контейнера?

В Symfony пролить фикстуры в тестовом окружении внутрь Docker контейнера можно с помощью инструмента DoctrineFixturesBundle и особых настроек для Docker.

Сначала установим необходимые зависимости:

composer require --dev doctrine/doctrine-fixtures-bundle

После установки зависимостей настроим DoctrineFixturesBundle, добавив его в конфигурацию config/bundles.php, чтобы он автоматически регистрировался:

...
DoctrineBundleFixturesBundleDoctrineFixturesBundle::class => ['test' => true],
...

Затем создадим миграцию, чтобы создать таблицы в базе данных:

php bin/console make:migration
php bin/console doctrine:migrations:migrate

> Обратите внимание, что перед выполнением вышеперечисленных команд, Docker контейнер с базой данных должен быть запущен.

Теперь создадим фикстуры, которые будут использованы для заполнения базы данных в тестовом окружении. В каталоге src/DataFixtures создадим новый класс с фикстурами:

<?php

namespace AppDataFixtures;

use DoctrineBundleFixturesBundleFixture;
use DoctrinePersistenceObjectManager;

class MyFixtures extends Fixture
{
    public function load(ObjectManager $manager): void
    {
        // Ваш код для создания тестовых данных
    }
}

Используя метод load(), вы можете создать и сохранить объекты, которые будут представлять тестовые данные.

Теперь создадим файл с конфигурацией для Docker, в котором указаны настройки для базы данных:

version: '3'
services:
  db: # контейнер с базой данных
    image: mysql:latest
    environment:
     - MYSQL_ROOT_PASSWORD=root
     - MYSQL_DATABASE=test_database
  app: # контейнер с приложением Symfony
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - 8000:80
    environment:
      - DATABASE_URL=mysql://root:root@db/test_database

Создаем файл Dockerfile:

FROM php:7.4-apache

WORKDIR /app
COPY . /app

RUN apt-get update && 
 apt-get install -y git && 
 apt-get install -y zip && 
 apt-get install -y unzip && 
 apt-get install -y libzip-dev && 
 docker-php-ext-install pdo_mysql && 
 docker-php-ext-install zip && 
 curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && 
 composer install && 
 php bin/console doctrine:database:create --env=test && 
 php bin/console doctrine:schema:update --force --env=test

RUN a2enmod rewrite

Теперь мы готовы пролить фикстуры в тестовое окружение внутрь Docker контейнера.

Запустите Docker:

docker-compose up -d

После чего мы можем пролить фикстуры, выполнив команду:

docker-compose exec app php bin/console doctrine:fixtures:load --env=test

Теперь в базе данных, находящейся внутри Docker контейнера, будут сохранены тестовые данные из фикстур.

Надеюсь, это поможет вам правильно пролить фикстуры в тестовом окружении внутрь Docker контейнера в Symfony с использованием DoctrineFixturesBundle.