Как использовать отдельную базу данных для тестирования в Laravel 5? - PullRequest
0 голосов
/ 14 марта 2019

Мне нужно запустить тесты с отдельной базой данных

Я использую POSTGRESQL в качестве драйвера базы данных.

Мой конфиг / database.php

'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],

Специально для запуска тестов, которые я определил DB_DATABASE в phpunit.xml

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="MAIL_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
    ...
    <env name="DB_DATABASE" value="database_test"/>
</php>

Но когда я запускаю свои тесты PHPUnit, я получаю ошибку

PDOException: SQLSTATE [08006] [7] FATAL: база данных «database_test» не существует

1 Ответ

1 голос
/ 14 марта 2019

Новое соединение должно быть установлено в пределах database.php.

Я бы рекомендовал установить sqlite соединение с базой данных специально для тестирования:

...

'connections' => [
    'database_test' => [
        'driver'   => 'sqlite',
        'database' => ':memory:',
        'prefix'   => '',
    ],
...

Это будетсоздать соединение с базой данных sqlite, которое выполняется в памяти.

Затем необходимо установить DB_CONNECTION вместо DB_DATABASE.

<env name="DB_CONNECTION" value="database_test"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...