Как создать файл .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' => '[email protected]']);

$this->browse(function ($browser) use ($user) {
$browser->visit('/login')
->type('email', $user->email)
->type('password', 'secret')
->press('Login')
->assertPathIs('/home');
});
}
}

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

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

6

Решение

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

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

4

Другие решения

@alaric

Я изменил .env.dusk.testing подать в .env.dusk.local

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

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

1

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

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

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

Тогда в вашем .env.dusk задавать:

DB_CONNECTION=sqlite_dusk

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

0
По вопросам рекламы [email protected]