Я пытаюсь настроить тесты для моего Laravel приложения.
Приложение запускается с Docker compose.
Когда я пытаюсь запустить свои тесты с помощью этой команды:
docker-compose -p tests --env-file .env_tests --rm run myapp ./vendor/bin/phpunit
тесты начинают выполняться до того, как контейнер базы данных будет готов.
Как я могу заставить мои тесты ждать готовности базы данных?
Мой docker-compose.yml
выглядит следующим образом:
version: '2'
services:
mariadb:
image: 'bitnami/mariadb:10.1'
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=my_user
- MARIADB_DATABASE=my_database
- MARIADB_PASSWORD=my_password
ports:
# connect your dbeaver/workbench to localhost:${WORKBENCH_PORT}
- ${WORKBENCH_PORT}:3306
# volumes:
# Do not load databases here, as there is no
# good way for other containers to wait for this to finish
# - ./database:/docker-entrypoint-initdb.d
myapp:
tty: true
image: bitnami/laravel:6-debian-9
environment:
- DB_HOST=mariadb
- DB_USERNAME=my_user
- DB_DATABASE=my_database
- DB_PASSWORD=my_password
depends_on:
- mariadb
ports:
- 3000:3000
volumes:
- ./:/app
Когда я обычно запускаю приложение (docker-compose up
), Laravel ждет, пока контейнер mariadb завершит загрузку sh, но я не смог выяснить, как это сделать.
---- Edit ----
Я обнаружил, что используемый мной контейнер bitami / laravel Docker имеет скрипт под названием wait_for_db()
, который, кажется, ожидает базу данных .
Что я еще не выяснил, так это почему этот скрипт запускается в обычном режиме, а не когда я запускаю тесты.