Laravel Dusk сливается с файлом среды по умолчанию - PullRequest
0 голосов
/ 26 апреля 2018

Я только что столкнулся со следующим сценарием ...

Представьте, что вы используете базу данных MySQL для своего браузера, но предпочитаете базу данных SQLite для тестирования в Dusk. Я думаю, что это довольно распространенный случай, или может быть. Так что вы можете сделать что-то вроде этого:

в вашем .env файле:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

в вашем .env.dusk.local файле:

DB_CONNECTION=sqlite

Кто-то может подумать, что это сработает, но проблема в том, что файлы среды объединяются при запуске Dusk. Другими словами, конфигурация Dusk станет:

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead

И если вы посмотрите на конфигурацию Laravel по умолчанию для SQLite:

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
    ],

вы заметите, что он попытается получить базу данных homestead SQLite в корневом каталоге вашего проекта, которая не существует, и, очевидно, ваш тест не будет выполнен с ошибками типа: users table not found например, если вы запускаете миграции по умолчанию.

1 Ответ

0 голосов
/ 26 апреля 2018

Существует множество решений, которые переопределяют конфигурацию в характеристике CreatesApplication теста. Это может сработать, но вы должны помнить, что PHPUnit также использует ту же черту. Кроме того, это может привести к другим сложным ошибкам при настройке CI, как в моем случае. Кроме того, это на самом деле также не помогает с возможностью обнаружения ...

Они говорят, что элегантность в простоте, поэтому я думаю, что лучшим решением было бы изменить конфигурацию по умолчанию и удалить переменную среды из вашего sqlite-соединения. Так что это

'sqlite' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
],

станет этим

'sqlite' => [
    'driver' => 'sqlite',
    'database' => database_path('database.sqlite'),
    'prefix' => '',
],

Если вам по какой-либо причине все еще необходимо переопределить эту настройку, вы можете ввести новую переменную среды, заменяющую DB_DATABASE, которая не вступает в противоречие с набором по умолчанию, но я думаю, что в большинстве случаев выше идеальное решение.

...