Настройте Laravel 5.4 с Dusk, используя phpunit.xml, .env.dusk.local и базу данных в памяти sqlite.

Название говорит само за себя. Я хотел бы знать, как правильно настроить новый проект Laravel 5.4 с Dusk, используя базу данных SQLite в памяти.

Я могу запустить тесты, но получаю ошибку: "Нет такой таблицы: пользователи"

  • Я создал новый проект Laravel 5.4
  • Установил Dusk и добавил поставщика услуг
  • Я использую тест из документов laravel, который проверяет аутентификацию. Он уже включает трейт DatabaseMigrations
  • Я могу запустить тесты, и первый работает (переход к маршруту /login), но второй, где он пытался войти, терпит неудачу.

Я добавил .env.dusk.local, который содержит

APP_ENV=local
APP_KEY=RANDOM_STRING_HERE
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://laravel54.dev

DB_CONNECTION=sqlite
DB_DATABASE=':memory:' // I've also tried just :memory: and also adding these details to the config/database.php file but to no avail

Это тест, который я запускаю (непосредственно из документов)

<?php

namespace Tests\Browser;

use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;

    public function test_login_page()
    {
        $user = factory(User::class)->create();

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

Что мне не хватает?


person Michael    schedule 28.01.2017    source источник
comment
вам нужно мигрировать перед каждым тестом   -  person Kyslik    schedule 28.01.2017
comment
Я уже использую трейт DatabaseMigrations.   -  person Michael    schedule 28.01.2017
comment
@Mike Ты уже нашел решение? Использование файла ('database' => database_path('database.sqlite'), ) запустит тесты зеленым цветом, но не в памяти:/   -  person Mike    schedule 07.04.2017
comment
Тесты выполняются в отдельном процессе и поэтому не могут выполняться с базой данных в памяти. Единственный вариант — стандартно использовать выделенную базу данных sqlite.   -  person Michael    schedule 08.04.2017
comment
В .env.dusk.local можно установить db memory. Затем запустите php artisan serve --env=.env.dusk.local. (необязательно: запустите Chrome/Selenium). И, наконец, запустите файл php artisan dusk.   -  person Vladimir Vukanac    schedule 08.02.2018


Ответы (1)


Вы не можете.

Важно отметить, что для такого сквозного теста Dusk не сможет контролировать среду, поскольку он откроет отдельный процесс. SQLite в памяти будет существовать только в процессе Dusk, и реальный браузер, обращающийся к приложению, не будет знать о базе данных, созданной Dusk, что делает невозможным утверждение чего-либо в базе данных.

https://github.com/laravel/dusk/issues/110

https://github.com/laravel/dusk/issues/73

person Marco Aurélio Deleu    schedule 18.04.2017