Использование светильников с LiipFunctionalTestBundle и Postgresql - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь реализовать функциональные тесты с FunctionalTestBundle Liip в устаревшем проекте Symfony 2.8.

Этот проект использует рукописные запросы postgresql в репозиториях и тому подобное, поэтому я не могу принудительно использовать sqlite. На основе документации комплекта я должен сам создать схему при настройке теста. Я попытался использовать фрагмент кода, приведенный в документации.

public function setUp()
{
    $em = $this->getContainer()->get('doctrine')->getManager();
    if (!isset($metadatas)) {
        $metadatas = $em->getMetadataFactory()->getAllMetadata();
    }

    $schemaTool = new SchemaTool($em);
    $schemaTool->dropDatabase();

    if (!empty($metadatas)) {
        $schemaTool->createSchema($metadatas);
    }

    $this->postFixtureSetup();
}

Ошибка на $schemaTool->createSchema($metadatas); со следующей ошибкой:

SQLSTATE[42P06]: Duplicate schema: 7 ERROR:  schema "app" already exists' while executing DDL: CREATE SCHEMA app

/path/to/project/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/ToolsException.php:39
/path/to/project/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/SchemaTool.php:96

Моя конфигурация следующая:

# /path/to/project/app/config/config_test.yml
doctrine:
dbal:
    default_connection: airlinesManager
    connections:
        airlinesManager:
            driver: pdo_pgsql
            memory: true
            path:   "%kernel.cache_dir%/test.db"

Зависимость:

# /path/to/project/composer.json
{
    [...]
    "require": {
        "php": "^7.1",
        "symfony/symfony": "2.8.*",
        "doctrine/orm": "^2.4.8",
        "doctrine/doctrine-bundle": "~1.4",
        "doctrine/common": "2.*",
        "doctrine/dbal": "2.*",
        "doctrine/doctrine-fixtures-bundle": "2.*",
        [...]
    },
    "require-dev": {
        [...],
        "liip/functional-test-bundle": "^1.10"
    },
    [...]
}

Если мне изменить мою конфигурацию на driver: pdo_sqlite и удалить фрагмент setUp, все работает нормально, если речь идет о приборах. Но я начинаю получать ошибки, когда тесты начинают использовать некоторые рукописные запросы postgresql.

Есть идеи, как заставить работать схему?

NB. По некоторым причинам я не могу выполнить какие-либо операции с базой данных из консоли Symfony. Вот пример при попытке отбросить базу данных.

php app/console doctrine:database:drop --force --env="test"

Я всегда получаю одну и ту же ошибку.

Could not drop database for connection named /path/to/project/app/cache/test/test.db
An exception occurred while executing 'DROP DATABASE /path/to/project/app/cache/test/test.db':

SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near "/"
LINE 1: DROP DATABASE /path/to/project/...

Опять же, это прекрасно работает при использовании sqlite.

...