我的测试功能尝试访问路由组时出现问题

时间:2019-07-12 11:46:22

标签: php laravel laravel-passport laravel-middleware

我要测试的是访问某些路由,但是这些路由在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);
}

我希望某个功能可以访问此路由,因为该组中有更多路由,其余测试取决于此功能

1 个答案:

答案 0 :(得分:0)

我从未使用过Laratrust,但是快速浏览其源代码后,问题似乎在于您需要在 [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "pk.sastaticket.staging", "sha256_cert_fingerprints": ["12:57:39:74:FA:3D:64:A7:37:F2:A1:7A:2F:DD:73:AB:D0:82:29:D4:47:A9:B5:5F:53:6B:50:FE:E2:21:1B:73"] } }, { "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "web", "site": "https://staging.sastaticket.pk" } }, { "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "android_app", "package_name": "pk.sastaticket.staging", "sha256_cert_fingerprints": ["12:57:39:74:FA:3D:64:A7:37:F2:A1:7A:2F:DD:73:AB:D0:82:29:D4:47:A9:B5:5F:53:6B:50:FE:E2:21:1B:73"] } }] 中间件检查中指定api防护。将role添加到您的,guard:api中间件中:

role

Route::group(['middleware' => ['auth:api', 'role:superadministrator,guard:api']], function() { Route::apiResource('users', 'UserController'); } 中间件检查中,如果未指定防护,它将使用auth配置中定义的默认防护(如果未更改,则为role)。因此,中间件将从web身份验证保护中寻找用户,该保护不存在。

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