Как проверить вход в Dusk в приложении Laravel / Lighthouse / Passport / Nuxt? - PullRequest
0 голосов
/ 18 февраля 2020

Я установил приложение Nuxt с Laravel, и прежде чем делать слишком много, я бы хотел настроить тестирование в сумерках. Приложение / логин отлично работает, но я не могу заставить его работать на автоматических тестах Dusk.

Используется lighthouse-graphql-passport-auth с настройкой , описанной здесь . Я думаю, что проблема, вероятно, связана с генерацией токенов в среде Dusk.

Вот пример теста, который я не могу выполнить:

public function testWithLoggedIn()
{
    $user = factory(User::class)->create([
        'email' => 'test@dusk.com',
        'password' => bcrypt('test'),
    ]);

    $this->browse(function ($browser) use ($user) {
        $browser->visit('/login')
                ->type('username', $user->email)
                ->type('password', 'test')
                ->press('Login')
                ->assertSee('Hello First User');
    });
}

Итак, я уже попробовал несколько вещей. Например, если я добавлю это в методе setUp():

$this->artisan('passport:install');
$client = Client::findOrFail(2);
config()->set('lighthouse-graphql-passport.client_id', 2);
config()->set('lighthouse-graphql-passport.client_secret', $client->secret);

Я получу эту ошибку:

Error: GraphQL error: Client authentication failed

Я также попытался добавить ту же информацию, что и локально, для oauth_clients. К сожалению, перенаправление отличается ('http://local.test' для локального и 'http://apache' при тестировании в сумерках).

DB::table('oauth_clients')->insert([
        'id' => 2,
        'name' => 'Apps Password Grant Client',
        'secret' => 'SWjOP5Y8NzxEx7z3dlaVs08VDUWgrSl96l4V9JO3',
        'redirect' => 'http://apache',
        'personal_access_client' => 0,
        'password_client' => 1,
        'revoked' => 0,
        'created_at' => '2020-02-17 11:02:33',
        'updated_at' => '2020-02-17 11:02:33',
    ]);

Это возвращает это вид ошибки:

Error: GraphQL error: The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.

Как мне проверить это приложение? Все будет за этим экраном входа в систему, так что, вероятно, есть способ, и при необходимости я могу изменить метод входа (возможно, без использования паспорта).

1 Ответ

0 голосов
/ 18 февраля 2020

Оказывается, второе решение с включенной вставкой DB::table.

Недостаточно было немного подождать в тесте перед утверждением (с ->pause(300) или ->waitFor('.selector', 0.2).

Например, это сработало:

$this->browse(function ($browser) use ($user) {
        $browser->visit('/login')
                ->type('username', $user->email)
                ->type('password', 'test')
                ->press('Login')
                ->waitFor('.admin-dashboard', 0.2)
                ->assertSee('Welcome');
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...