Laravel с Docker: при тестировании выбрана неправильная БД - PullRequest
0 голосов
/ 05 июня 2019

Мои контейнеры-докеры таковы:

  • worklog_laravel_app (приложение Laravel)
  • worklog_laravel_web (Nginx)
  • worklog_laravel_db (MySQL)

У меня есть две базы данных, настроенные в контейнере worklog_laravel_db:

  • worklog
  • worklog_test

Сейчас я нахожусь в процессе написания тестов для моего приложения через docker exec -it bash в контейнере worklog_laravel_app.

Я уже настроил env.testing на те же переменные, что и .env, за исключением:

  • APP_ENV=testing
  • DB_DATABASE=worklog_test

Но выполнение тестов все равно заканчивается выбором локальной базы данных разработчика (worklog).

Почему это так? И как мне это решить?


Редактировать 1:

Я проверил это, наблюдая, как посеянные данные в таблице worklog удаляются после выполнения тестов, и auto_increments этих таблиц изменяется при каждом запуске теста.


Редактировать 2:

Забыл упомянуть, что моя настройка Docker соответствует настройке DigitialOcean


Редактировать 3:

Мои .env.testing переменные:

APP_NAME="Work Log"
APP_ENV=testing
APP_KEY={}
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=worklog_laravel_db
DB_PORT=3306
DB_DATABASE=worklog_test
DB_USERNAME=local
DB_PASSWORD={}

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

1 Ответ

0 голосов
/ 05 июня 2019

Сначала убедитесь, что ваша тестовая среда называется .env.testing, а затем убедитесь, что в файле TestCase.php, который вы указываете в файле TestCase.php в методе createApplication(), указывается следующая строка:

$app->loadEnvironmentFrom('.env.testing');

Убедитесь, что перед загрузкой начальной загрузки, иначе она не будет работать.Ваш метод createApplication должен выглядеть следующим образом:

public function createApplication()
    {
        $app->loadEnvironmentFrom('.env.testing');

        $app = require __DIR__.'/../bootstrap/app.php';

        $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();

        return $app;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...