Как настроить базу данных для тестовой среды в Symfony 4 - PullRequest
0 голосов
/ 05 июня 2018

Я смущен тем, как настроить базу данных для тестовой среды в Symfony 4. Я имел дело с этим в файле config_test.yml в Symfony 3 и ниже.

Какая лучшая практика?Должен ли я воссоздать файл doctrine.yaml в config / packages / test?

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

<phpunit>
    <php>
        <!-- the value is the Doctrine connection string in DSN format -->
        <env name="DATABASE_URL" value="mysql://USERNAME:PASSWORD@127.0.0.1/DB_NAME" />
    </php>
    <!-- ... -->
</phpunit>

Однако это не отвечает моим потребностям, поскольку мне нужно иметь возможность обновлять схемы / загружать данные в тестовой среде.

1 Ответ

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

Для того, что вы хотите сделать, я обычно создаю собственный тестовый загрузчик, который запускает необходимые команды доктрины и выглядит примерно так:

# tests/bootstrap.php
<?php

if (isset($_ENV['BOOTSTRAP_RESET_DATABASE']) && $_ENV['BOOTSTRAP_RESET_DATABASE'] == true) {
    echo "Resetting test database...";
    passthru(sprintf(
        'php "%s/../bin/console" doctrine:schema:drop --env=test --force --no-interaction',
        __DIR__
    ));
    passthru(sprintf(
        'php "%s/../bin/console" doctrine:schema:update --env=test --force --no-interaction',
        __DIR__
    ));
    passthru(sprintf(
        'php "%s/../bin/console" doctrine:fixtures:load --env=test --no-interaction',
        __DIR__
    ));
    echo " Done" . PHP_EOL . PHP_EOL;
}
require __DIR__.'/../vendor/autoload.php';

В моем phpunit.xml.dist я добавил переменную env:

<env name="DATABASE_URL" value="sqlite:///%kernel.project_dir%/var/test.db"/>
<env name="BOOTSTRAP_RESET_DATABASE" value="1" />

Если вы хотите увидеть базовый пример, у меня есть демонстрационный проект Symfony 4, который использует его для настройки базы данных базовых тестов, которая используется функциональными тестами с использованием веб-теста.Вы можете найти его на GitHub: dbrumann / product-api

...