У меня есть приложение, и я хочу использовать Laravel Dusk.
Я создал файл с именем .env.dusk.local
с базой данных для тестов и файлом с именем .env
с моей базой данных по умолчанию.
Я запустил команду php artisan и создал пользователя с помощью /register
.
После того, как я создал тест входа в систему с тем же адресом электронной почты, но с другим паролем, это не будет проблемой, потому что в .env.dusk.local
это будет другой банк и не будет зарегистрирован ни у кого.
Но когда я запускаю команду php artisan dusk, она берет информацию из оригинала .env
и заканчивает стирание всех записей из моей базы данных по умолчанию.
Я хотел бы знать, как загрузить информацию из моего .env.dusk.local
и использовать тестовую базу данных.
.env default
APP_ENV=local APP_KEY=base64:K8otIkxJk0rFsZYSEq1hwBuaxQX3QI3Bb7ZmemJRIWg= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost:8000 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_dusk DB_USERNAME=root DB_PASSWORD=123456
.env.dusk.local
APP_ENV=local APP_KEY=base64:K8otIkxJk0rFsZYSEq1hwBuaxQX3QI3Bb7ZmemJRIWg= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost:8000 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_dusk_test DB_USERNAME=root DB_PASSWORD=123456
Функция Mu для testLogin
namespace Tests\Browser; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Support\Facades\App; use Tests\DuskTestCase; class LoginTest extends DuskTestCase { use DatabaseMigrations; /** * A Dusk test example. * * @return void */ public function testLogin() { $user = factory(\App\User::class)->create(['email' => 'lucas@example.com']); $this->browse(function ($browser) use ($user) { $browser->visit('/login') ->type('email', $user->email) ->type('password', 'secret') ->press('Login') ->assertPathIs('/home'); }); } }
Вот этот проект в github
Вместо .env.dusk.local
попробуйте .env.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
Надеюсь, это поможет!