Как я могу аутентифицировать пользователей в phpunit Testing с помощью Passport - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь написать тест PHPUnit, который сначала проверяет подлинность пользователя, прежде чем разрешить ему сделать запрос на публикацию, но получил ошибку

1) Tests \ Feature \ BooksTest :: test_onlyAuthenticatedUserCanAddBookSuccessfully ErrorException: исключение ошибки:Попытка получить свойство 'client' необъектного

C: \ wamp64 \ www \ bookstore \ vendor \ laravel \ passport \ src \ ClientRepository.php: 89 C: \ wamp64 \ www \ bookstore \ vendor \laravel \ passport \ src \ PersonalAccessTokenFactory.php: 71 C: \ wamp64 \ www \ bookstore \ vendor \ laravel \ passport \ src \ HasApiTokens.php: 67 C: \ wamp64 \ www \ bookstore \ tests \ Feature \ BooksTest.php:20

Когда я запускаю свой BooksTest

public function test_onlyAuthenticatedUserCanAddBookSuccessfully()
{
    $user = factory(User::class)->create();
    $token = $user->createToken('bookbook')->accessToken;

    $response = $this->withHeaders(['Authorization' => 'Bearer '.$token])
        ->json('POST', '/api/books', [
            'title' => 'new book post',
            'author' => 'new author',
            'user_id' => $user->id
        ]);

    $response->assertStatus(201);
}

Я впервые работаю с тестом PHPUnit, и я понятия не имею, почему я получаю эту ошибку.Как мне заставить это работать?

1 Ответ

0 голосов
/ 28 сентября 2018

Для этого можно использовать Passport::actingAs.

Например:

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

    Passport::actingAs($user);

    $response = $this->json('POST', '/api/books', [
            'title' => 'new book post',
            'author' => 'new author',
            'user_id' => $user->id
        ]);

    $response->assertStatus(201);
}

См. Документацию здесь - https://laravel.com/docs/5.7/passport#testing

...