首页 > 解决方案 > 单元测试 Laravel 7 Passport Scope 问题在 1 个测试用例中检索错误的用户护照

问题描述

我正在Laravel 7.30.2中编写单元测试

测试用例如下

  1. 超级管理员将能够在请求 API A 时更新预订并获得成功响应
  2. Nurse将能够在请求 API A 时更新预订并获得成功响应

第 2 种情况仅在第 1 种情况成功后发生

上述场景的单元测试代码如下

// create user and assign role superadmin
$user = factory(User::class)->create();
$user->assignRole('Super Admin');
Passport::actingAs(
    $user,
    ['admin']
);

// call the booking API while logged in as superadmin
$response = $this->put(route('api.booking.update', 1));
$response->assertExactJson(
    [
    'status_code' => config('staticdata.status_codes.ok'),
    'message' => config('messages.booking.update_success'),
    ]
);

// create user and assign role nurse
$user = factory(User::class)->create();
$user->assignRole('Nurse');
Passport::actingAs(
    $user,
    ['admin']
);

// call the booking API while logged in as nurse
$response = $this->put(route('api.booking.update', 1));
$response->assertExactJson(
    [
    'status_code' => config('staticdata.status_codes.ok'),
    'message' => config('messages.booking.update_success'),
    ]
);

第一个 API 调用

$response = $this->put(route('api.booking.update', 1));
$response->assertExactJson(
    [
    'status_code' => config('staticdata.status_codes.ok'),
    'message' => config('messages.booking.update_success'),
    ]
);

似乎工作正常,当我

dd(auth()->user()->id);

我能够获得正确的用户

但是在第二次 API 调用期间,我没有得到应该是护士的正确用户,而是得到了超级管理员

我要检查的代码已经放在只需要护士访问的条件内,所以我确信我在正确的代码位置上有 dd。

是否有一些我错过的 Passport 文档 laravel 或者 Laravel 在运行单元测试期间有调度任务的方法

请帮忙 。

谢谢你。

标签: laravelunit-testingphpunitlaravel-7laravel-passport

解决方案


推荐阅读