@EVOSandru6

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

Привет, ребят.

Подскажите пожалуйста - как прокидывать переменную окружения пр запуске Docker контейнера?
Моя задача - прогрузить фикстуры перед запуском теста.
В офдоке указана следующая конструкция для Makefile для этой задачи:

https://symfony.com/doc/current/the-fast-track/ru/...

SHELL := /bin/bash
tests: export APP_ENV=test
tests:
    symfony console doctrine:database:drop --force || true
    symfony console doctrine:database:create
    symfony console doctrine:migrations:migrate -n
    symfony console doctrine:fixtures:load -n
    symfony php bin/phpunit $@
.PHONY: tests


Я пробую след образом:

SHELL := /bin/bash
tests: export APP_ENV=test
tests:
	docker-compose run --rm manager-php-cli bin/console doctrine:database:drop --force || true
	docker-compose run --rm manager-php-cli bin/console doctrine:database:create
	docker-compose run --rm manager-php-cli bin/console doctrine:migrations:migrate -n
	docker-compose run --rm manager-php-cli bin/console doctrine:fixtures:load -n
	docker-compose run --rm manager-php-cli php bin/phpunit $@
.PHONY: tests


Но при запуске: make tests ловлю ошибку т.о., как будто бы эта переменная окружения не подцепилась.

Could not create database "app" for connection named default
An exception occurred while executing 'CREATE DATABASE "app"':
SQLSTATE[42P04]: Duplicate database: 7 ERROR: database "app" already exists


Т.к. app - название реальной базы данных, app_test - тестовой
Скрипт пытается создать сызнова ныне существующую рабочую базу.

В .env.test подключение определено так
DATABASE_URL=pgsql://app:secret@manager-postgres-test:5432/app

(при создании базы в тесте почему то название базы меняется на app_test)

В .env для боевой базы подключение определено так:
DATABASE_URL=pgsql://app:secret@manager-postgres:5432/app

Эта тестовая база в отдельном контейнере.

manager-postgres:
    image: postgres:13.3-alpine
    volumes:
      - manager-postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app
    ports:
      - 54321:5432
  # тестовая база
  manager-postgres-test:
    image: postgres:13.3-alpine
    volumes:
      - manager-postgres-test:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app_test
    ports:
      - 54322:5432


Шо не так?
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 1
@EVOSandru6 Автор вопроса
Решил добавлением флага --env=test
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы