Тестирование Laravel Sanctum, действующее как результат плохого вызова метода - PullRequest
2 голосов
/ 11 апреля 2020

Я пытаюсь протестировать аутентифицированный маршрут API, который только аутентифицированный пользователь может отправить на указанный c маршрут.

Глядя на документы Laravel Sanctum, я могу использовать приведенный ниже код для создания и аутентификации пользователя:

Sanctum::actingAs(
    factory(User::class)->create(),
    ['*']
);

При попытке воспроизвести это сообщение об ошибке при выполнении теста

BadMethodCallException: Call to undefined method App\User::withAccessToken()

Мой тестовый код выглядит следующим образом:

    public function an_authenticated_user_can_add_a_client()
    {
        $user = Sanctum::actingAs(
            factory(User::class)->create(),
            ['*']
        );
        dd($user);
        // $this->post('/api/clients', $this->data());
    }

api. php

Route::middleware('auth:sanctum')->group(function () {

    //Clients
    Route::get('/clients/{client}','ContactsController@show');
    Route::post('/clients','ContactsController@store');
    Route::patch('/clients/{client}','ContactsController@update');
    Route::delete('/clients/{client}','ContactsController@destroy');
});

У меня нет метода withAccessToken () в мой класс пользователя и не может видеть, откуда этот метод приходит или указан где-либо. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

В вашей пользовательской модели отсутствует черта HasApiTokens, которая дает функцию, которую вы упускаете в пользовательской модели. Также описано в документации , в разделе Выдача токенов API.

use Laravel\Sanctum\HasApiTokens;

class User {
    use HasApiTokens;
}
1 голос
/ 16 апреля 2020

Laravel В Sanctum для SPA используется обычная аутентификация сеанса, поэтому метод действует по умолчанию. Метод actAs в Sanctum предназначен для использования для API-токенов. Надеюсь, это поможет.

...