В 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.