Тестирование действия Laravel Sanctum как результат неправильного вызова метода
Я пытаюсь протестировать аутентифицированный маршрут API, который только аутентифицированный пользователь может отправлять на определенный маршрут.
Глядя на документы 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() в моем классе User, и я не вижу, откуда этот метод исходит или где-то указан. Любая помощь будет принята с благодарностью.
2 ответа
В вашей модели пользователя отсутствует HasApiTokens
trait, который придает функции, которые вам не хватает для модели User. Также описано в документации в разделе "Выдача токенов API".
use Laravel\Sanctum\HasApiTokens;
class User {
use HasApiTokens;
}
Laravel Sanctum для SPA использует обычную аутентификацию сеанса, поэтому метод по умолчанию actAs работает нормально. Метод actAs в Sanctum предназначен для использования с токенами API. Надеюсь, это поможет.