Я использую 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
Надеюсь, это поможет!