测试 Laravel Sanctum 作为错误方法调用的结果

Testing Laravel Sanctum acting as results in bad method call

我正在尝试测试经过身份验证的 API 路由,只有经过身份验证的用户才能 post 到特定路由。

查看 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');
});

我的用户 class 中没有 withAccessToken() 方法,也看不到此方法的来源或指定位置。 任何帮助将不胜感激。

您的 User 模型缺少 HasApiTokens 特性,它为 User 模型提供了您缺少的功能。在 documentation 部分的发行 API 代币中也有描述。

use Laravel\Sanctum\HasApiTokens;

class User {
    use HasApiTokens;
}

Laravel SPA 的 Sanctum 使用正常的会话身份验证,因此默认的 actingAs 方法工作正常。 Sanctum 中的 actingAs 方法旨在用于 api 个令牌。希望对你有帮助。