Почему мой testLogin не работает в Laravel Dusk, хотя я использую пример кода из документации?

Я только начал тестировать браузер с помощью Dusk, но не могу заставить работать тест входа по умолчанию. Что я делаю не так?:

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

Вот мой тест в своем классе:

class ExampleTest extends DuskTestCase
{
    use DatabaseMigrations;

    public function testBasicExample()
    {
        $user = factory(User::class)->create([
            'email' => '[email protected]',
        ]);

        $this->assertDatabaseHas('users',['email' => $user->email]);

        $this->assertTrue(Hash::check('secret', $user->password));

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

Вот моя фабрика пользователей:

$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => bcrypt('secret'),
    ];
});

Вот ошибка, которую я получаю:

Actual path [/login] does not equal expected path [/home].
Failed asserting that '/login' matches PCRE pattern "/^\/home$/u".

Как это исправить?


person forrestedw    schedule 03.06.2019    source источник
comment
Ваша форма входа перенаправляется на /home?   -  person mrhn    schedule 03.06.2019
comment
Да. Я обнаружил кое-что, что может иметь значение. В моем файле phpunit.xml указано <server name="DB_DATABASE" value=":memory:"/>, и я думаю, что именно здесь происходит генерация фабрики. Но тест браузера обращается к моей базе данных mysql. Как мне заставить тест браузера использовать тот же :memory: db, или я не могу?   -  person forrestedw    schedule 03.06.2019
comment
Вы не можете использовать базу данных :memory: для тестов Dusk. Тест и ваше приложение выполняются в отдельных процессах, и у них нет доступа к одной и той же базе данных в памяти.   -  person Jonas Staudenmeir    schedule 03.06.2019
comment
Спасибо. Я обнаружил это, так как я написал вопрос. Я установил sqlite-соединение в database.php и запускаю его, но в сумраке используется значение APP_URL из .env, а не .env.dusk.local. Мне также пришлось настроить мои тесты phpunit для запуска на sqlite вместо :memory:, чего я не хочу. Как заставить phpunit работать на :memory:? б) что нужно запускать на sqlite при выполнении тестов в сумерках? и c) упаковать это по необходимости и загрузить правильные значения env?   -  person forrestedw    schedule 03.06.2019


Ответы (1)


У меня также была такая же проблема, и я каким-то образом понял это, изменив ->assertPathIs('/') на то же, что и $browser->visit('/'). Это сработало, и это все, что я хотел.

person mathews opemba    schedule 16.05.2020