php - Laravel:测试多用户注销
问题描述
我目前在实施测试以验证用户确实无权执行该操作时遇到问题,只要有权限的用户执行了先前的操作。
我已经使用Laravel Jwt成功实现了多用户登录,并且控制器得到了适当的保护。
基本设置
使用可以有两种模型(角色):
- 员工(使用员工警卫)
- 会员(使用会员守卫)
示例测试流程
- 创建员工并登录系统
- 员工发送创建请求并创建记录 XYZ
- 创建成员并登录系统
- 成员发送删除记录 XYZ 请求并抛出未验证错误
预期行为:创建记录 XYZ,然后引发未经身份验证的错误。
实际行为:记录XYZ由Member创建然后删除
代码:
public function testRole_throwsNotAuthenticated() {
// $staff & $member are created using factories
// staff logged in & record is created
$this->actingAs($staff, 'staff')->json('POST', '...', []);
// member logged in & record is deleted -> should not allow this
$this->actingAs($member, 'members')->json('DELETE', '...', []);
// assertion removed for cleaner code
}
我尝试过的:
- 在每次操作之前检查使用的警卫
auth('staff')->check(); // returns true
auth('members')->check(); // returns true
- 在执行删除之前从员工注销
auth('staff')->logout(); // returns error JTW is not parsable
请注意以下内容:
- 使用 REST 客户端手动执行的相同流程,预期的行为是结果
- 登录方法完全按预期工作。员工无法通过会员卫士登录,反之亦然
- 检查角色和操作权限的单独测试是否按预期工作
- 由于经过功能测试命中第三方 api,必须先由工作人员创建记录以获取删除所需的数据
解决方案
推荐阅读
- java - 保存网站活动的更好选择
- javascript - 按另一个对象数组的属性按整数过滤数组
- c - 遍历列表时出现分段错误
- pandas - 基于多个条件的分割总数
- oracle - DBMS_OUTPUT 缓冲区大小(客户端或数据库端)
- angular - Angular 8 和 .NET Core 类型“可观察”
' 不可分配给类型 'Observable ' - bash - 设置配置文件时,Maven 退出 bash 运行,并且构建失败
- constructor - 将派生类的匿名对象传递给 Eiffel 中的例程
- spring - 如何在对话服务中使用自动连线服务
- flutter - 在提供者的消费者小部件内部的测试中找不到小部件