Как создать файл .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

ЛогинТест.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');
        });
    }
}

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

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


person Lucas Lopes    schedule 27.03.2017    source источник


Ответы (5)


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

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

person alaric    schedule 27.03.2017
comment
Измените имя файла env.dusk.testing на env.dusk.local. - person alaric; 27.03.2017

@аларик

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

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

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

person Lucas Lopes    schedule 27.03.2017

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

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

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

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

DB_CONNECTION=sqlite_dusk

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

person askilondz    schedule 29.03.2017

У меня была похожая проблема, когда я использовал \App\User::truncate() в моем файле сумерек.

Он усекает базу данных dev вместо тестовой базы данных. Я точно не знаю, почему, потому что php artisansummer заменяет файл .env на .env.dusk.local для теста. Добавление всей конфигурации БД в .env.dusk.local помогло мне.

Итак, во-первых, если ваш файл .env имеет APP_ENV=local, переименуйте ваш файл сумрака в .env.dusk.local

Во-вторых, в вашем .env.dusk.local обязательно используйте всю конфигурацию вашей базы данных:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tdd_test
DB_USERNAME=your_username
DB_PASSWORD=your_password

вместо

DB_CONNECTION=test // configuration of test in the /config/database.php

затем запустите свой тест с

php arisan dusk
person Charles G    schedule 30.04.2019

передайте свой сумеречный env в laravel serve:

-- php artisan serve --env=dusk.local
person Mizael Clistion    schedule 23.12.2020
comment
Какую дополнительную информацию это дает в дополнение к очень похожему, но более подробно объясненному ответу Лукаса Лопеса? Пожалуйста, выделите разницу, объясните эффект, который она имеет, и укажите преимущество, которое она дает. - person Yunnosch; 24.12.2020
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. – Из обзора - person OMR; 24.12.2020