Как создать файл .env для теста с Laravel Dusk

Я использую Dusk для простого теста входа в систему.

Я создал файл .env.dusk, чтобы тест использовал альтернативную базу данных и не удалял данные, зарегистрированные на платформе.

Архив .env

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_dusk DB_USERNAME=root DB_PASSWORD=123456 

Архив .env.dusk

 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_dusk_test DB_USERNAME=root DB_PASSWORD=123456 

LoginTest.php

 namespace Tests\Browser; use Tests\DuskTestCase; use Illuminate\Foundation\Testing\DatabaseMigrations; class LoginTest extends DuskTestCase { use DatabaseMigrations; /** * A Dusk test example. * * @return void */ public function testLogin() { $user = factory(\App\User::class)->create(['email' => 'example@example.com']); $this->browse(function ($browser) use ($user) { $browser->visit('/login') ->type('email', $user->email) ->type('password', 'secret') ->press('Login') ->assertPathIs('/home'); }); } } 

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

Как я могу решить эту проблему?

    Вы должны добавить значение среды (которое соответствует среде, в которую вы будете инициализировать Dusk), до конца вашего имени файла .env.dusk (например, – .env.dusk.local). Для справки проверьте документацию по обработке окружающей среды в сумерках .

    Обновление . Если у вас все еще есть проблемы в ваших комментариях, поставьте следующее в верхней части своей функции testLogin и сообщите, что говорит dd(env('APP_ENV'));

    @alaric

    Я изменил файл .env.dusk.local на .env.dusk.local

    Я запустил php artisan serve и создал нового пользователя в базе данных laravel_dusk.

    Я снова запустил php artisan serve а затем в php artisan dusk для запуска тестов и создания нового пользователя с тем же адресом электронной почты, но в базе данных laravel_dusk_test и он продолжает регистрироваться в laravel_dusk.

    Вместо использования базы данных mysql я бы рекомендовал использовать временную базу данных sqlite, поскольку она создается и уничтожается во время тестов.

    вам нужно будет иметь конфигурацию sqilte в вашем файле database.php, указывающую на фактический файл .sqlite, который у вас есть в вашей установке

    поэтому скопируйте конфигурацию sqlite в database.php а затем вставьте ее, назовите ее sqlite_dusk возможно, тогда для местоположения db поместите ее как storage_path('dusk.sqlite') или что-то в этом роде. Затем создайте пустой файл dusk.sqlite в корневой папке вашего storage .

    Затем в вашем наборе .env.dusk :

     DB_CONNECTION=sqlite_dusk 

    Надеюсь, это поможет!