我的测试函数尝试访问路由组时出现问题

Problem in my test function trying to access group of routes

我要测试的是访问一些路由,但这些路由在 laratrust 角色中间件中,这个角色是 auth 用户必须是超级管理员才能进入这个路由我的问题是我不知道如何写这个函数。

我试过在这样的测试函数中让用户成为超级管理员

public function  Test()
{
    $user = factory(User::class)->create();
    $user->attachRole('superadministrator');
    $this->actingAs($user, 'api');

    $response = $this->json('GET', 'api/users');
    $response->assertStatus(200);
}

但即使我检查了这个用户是超级管理员的数据库,它也没有用,测试表明我不是超级管理员

这是我的 api 路线:

Route::group(['middleware' => ['auth:api', 'role:superadministrator']],
function()
{
    Route::apiResource('users', 'UserController');
}

这是我在 UserController 中的索引函数:

public function index()
{
    return Response()->json(User::all, 200);
}

我期望的是一个函数可以访问这个路由,因为这个组中有更多的路由,其余的测试依赖于这个函数

我从未使用过 Laratrust,但快速查看其源代码后,问题似乎是您需要在 role 中间件检查中指定 api 守卫。将 ,guard:api 添加到您的 role 中间件:

Route::group(['middleware' => ['auth:api', 'role:superadministrator,guard:api']], function() {
    Route::apiResource('users', 'UserController');
}

role 中间件检查中,如果您不指定守卫,它将使用您的身份验证配置中定义的默认守卫(如果您没有更改它,则为 web ).因此,中间件将从 web auth guard 中寻找用户,它不存在。

好消息是,您的测试成功了!它在您的路由定义中发现了一个错误。