@gigisarri98

Почему Laravel не подключается к БД во время тестирования?

Пишу unit-тесты для приложения на Laravel. Всё было хорошо, пока не дошло до базы данных. Как только затрагивается какая-то модель в тестируемом методе, возникает ошибка:
Error: Call to a member function connection() on null
// и тут вывод десятка строк из базового класса моделей Laravel

Вероятность, что проблема не в тестируемом методе, стремится к 100 процентам, потому что эта ошибка распространяется на все подобные методы.
Строки из .env с подключением к БД:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=parser
DB_USERNAME=root
DB_PASSWORD=1111

phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true"
>
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <coverage processUncoveredFiles="true">
        <include>
            <directory suffix=".php">./app</directory>
        </include>
    </coverage>
    <php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="CACHE_DRIVER" value="array"/>
        <!-- <server name="DB_CONNECTION" value="sqlite"/> -->
        <!-- <server name="DB_DATABASE" value=":memory:"/> -->
        <server name="MAIL_MAILER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
        <server name="TELESCOPE_ENABLED" value="false"/>
        <env name="DB_CONNECTION" value="mysql"/>
        <env name="DB_HOST" value="127.0.0.1"/>
        <env name="DB_PORT" value="3306"/>
        <env name="DB_DATABASE" value="parser"/>
        <env name="DB_USERNAME" value="root"/>
        <env name="DB_PASSWORD" value="1111"/>
    </php>
</phpunit>


Что я делал:
1.Поменял класс, который расширяет тест с PHPUnit\Framework\TestCase на Tests\TestCase.
2.Как видно выше, внес env в phpunit.xml. Да, окружение их видит и они выводятся в var_dump().
3.Менял окружение на local (да, кэш чистил).

Результат один и тот же, гугл ничем не помогает, помогите, пожалуйста, не знаю, что и делать.
  • Вопрос задан
  • 425 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Всё, что можно сказать — это то, что ошибка «не подключается к БД» выглядит иначе.
У вас же она в чём-то другом.
Ответ написан
@gigisarri98 Автор вопроса
Да, проблема была не "не подключается к БД", а в том, что ларавел в тестах не видела фасады и вообще всё, что касается предустановленных классов Лары (фасады, модели и тп).
Решение:
Поменять класс, который расширяет тест с PHPUnit\Framework\TestCase на Tests\TestCase и прописать:
protected function setUp(): void 
    {
        parent::setUp();
        // дальнейший код сетапа
    }


С чем связана такая проблема, я не понимаю.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы