PHPunit выполняет тесты с неправильным драйвером PDO в Symfony 4 - PullRequest
0 голосов
/ 19 марта 2020

У меня есть блок PHP, который отлично работает на удаленном переводчике.

Он работает в во всех случаях без PHP Storm (IE использует ту же команду в командной строке на docker)

Вот команда, выполненная phpstorm, и ее я пытаюсь сравнить в любой ситуации: php /var/www/privateapi/vendor/bin/simple-phpunit --bootstrap /var/www/privateapi/tests/bootstrap.php --configuration /var/www/privateapi/phpunit.xml.dist --teamcity --cache-result-file=/va r/www/privateapi/.phpunit.result.cache

В PhpStorm, когда я запускаю тесты, которые должны связываться с базы данных, происходит сбой, поскольку он пытается использовать драйвер MYSQL, а я использую PG SQL.

Сводка:

Рабочие случаи:

  • В командной строке на docker, с или без тестов БД
  • В командной строке, за пределами docker (т.е. docker exec -it ...), с тестами БД или без них
  • с PHPStorm, с удаленным интерпретатором, без тестов БД

Сбойный случай:

  • с PHPStorm, с дистанционным интерпретатором, с тестами БД

Вот мой конф:

app / config / packages / test / doctrine .yaml

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL_TEST)%'
        driver: 'pdo_pgsql'
        mapping_types:
            container_mode: string
            network_provider: string
            sensor_status: string
            notification_channel: string
        server_version: 11
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

app / phpunit. xml .dist

<?xml version="1.0" encoding="UTF-8"?>

<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.5/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="tests/bootstrap.php"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <server name="SHELL_VERBOSITY" value="-1" />
        <server name="SYMFONY_PHPUNIT_REMOVE" value="" />
        <server name="SYMFONY_PHPUNIT_VERSION" value="7.5" />
        <env name="APP_ENV" value="test" />
        <env name="KERNEL_CLASS" value="App\Kernel" />
    </php>

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>tests</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
            <exclude>
                <file>src/Kernel.php</file>
                <file>src/Event/Listener/JsonToHtmlDevEventListener.php</file>
            </exclude>
        </whitelist>
    </filter>

    <listeners>
        <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
    </listeners>
</phpunit>

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

app /tests/Security/Voter/OrganizationVoterTest.php

class OrganizationVoterTest extends KernelTestCase
{
    private ?OrganizationVoter $voter;
    private ?UserRepository $userRepository;
    private ?OrganizationRepository $orgaRepository;

    protected function setUp()
    {
        self::bootKernel();
        $container = self::$container;
        $this->voter = $container->get(OrganizationVoter::class);
        $this->userRepository = $container->get('doctrine')->getRepository(User::class);
        $this->orgaRepository = $container->get('doctrine')->getRepository(Organization::class);

        parent::setUp();
    }

    public function testGetMinRequiredLevel()
    {
        $orga = $this->orgaRepository->findOneBy(['name' => 'orga1']);
        [....]
    }
}

Я получу следующую ошибку:

Doctrine\DBAL\Exception\DriverException : An exception occurred in driver: could not find driver
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:106
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:166
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:154
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php:28
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:362
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:1443
 /var/www/privateapi/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:890
 /var/www/privateapi/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php:718
 /var/www/privateapi/vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php:193
 /var/www/privateapi/tests/Security/Voter/OrganizationVoterTest.php:32

1 Ответ

0 голосов
/ 22 марта 2020

Благодаря Jakumi я узнал, что мне нужно вручную добавить env Var DATABASE_URL_TEST.

Поскольку я использую WSL, я должен использовать это как хост docker.for.win.localhost.

...