【发布时间】:2021-11-11 14:30:33
【问题描述】:
我有一个拥有大约 30 个权限的 Laravel 应用程序。 应用程序还使用大量端点。
现在我想为每个端点编写功能测试,检查每个端点的权限。
我的问题是: 我应该为每个权限编写单独的方法吗:
public function test_if_user_can_create_article_having_articles_index_permission()
{
$user = $this->makeUserWithSuchPermisssion();
$this->actingAs($user)->post('/articles')->assertStatus(403)
}
public function test_if_user_can_create_article_having_articles_create_permission()
{
$user = $this->makeUserWithSuchPermisssion();
$this->actingAs($user)->post('/articles')->assertStatus(201)
}
public function test_if_user_can_create_article_having_users_index_permission()
{
$user = $this->makeUserWithSuchPermisssion();
$this->actingAs($user)->post('/articles')->assertStatus(403)
}
等等
或者我应该通过循环遍历动作测试中的每个权限来做到这一点
public function test_if_user_can_create_article()
{
foreach($invalid_permissions as $permission)
{
$user = $this->makeUserWithSuchPermisssion($permission);
$this->actingAs($user)->post('/articles')->assertStatus(403)
}
foreach($ok_permissions as $permission)
{
$user = $this->makeUserWithSuchPermisssion($permission);
$this->actingAs($user)->post('/articles')->assertStatus(201)
}
}
或者我应该以其他方式吗?如果是,你是如何解决的? 我不想使用这样的每个权限对每个端点进行多次手动调用,因为它会变得非常难以维护。
public function test_if_user_can_create_article()
{
$route = '/articles';
$this->actingAs($this->createUserWithPermission('article.index'))->post($route)->assertStatus(403);
$this->actingAs($this->createUserWithPermission('users.index'))->post($route)->assertStatus(403);
$this->actingAs($this->createUserWithPermission('users.update'))->post($route)->assertStatus(403);
$this->actingAs($this->createUserWithPermission('article.create'))->post($route)->assertStatus(201)->assertJson(['aaa' => 'bbb']);
}
【问题讨论】:
标签: php laravel testing permissions phpunit