我有一個Laravel應用程式,有大約30個權限。 應用程式還使用了大量的端點。
現在我想為每個端點寫功能測驗, 檢查它的每個權限。
這就是我的問題。 我是否應該為每個權限撰寫單獨的方法,如:
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'/span>)->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'/span>;
$this->actingAs($this->createUserWithPermission('article'))。 index'))->post($route)->assertStatus(403)。
$this->actingAs($this->createUserWithPermission('users'))->assertStatus(403) 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'] )。
}
uj5u.com熱心網友回復:
在一天結束的時候,這取決于你! (不是你要找的)你應該測驗那些為你的應用程式增加價值的功能。
我個人會有2個這樣的高階測驗來測驗1個賬戶是否有權限,1個賬戶是否有權限,然后在一些不明顯的測驗中對檢查模擬用戶權限的功能進行單元測驗。
現在我不能準確回答你應該測驗什么,因為我不知道你的權限是如何實作的。但是如果你決定要測驗每一個權限(檢查每一個負面情況似乎是浪費時間),我將把所有失敗的情況集中到一個測驗中,并像你在第二個例子中所做的那樣對它們進行回圈,然后對通過的測驗進行另一個測驗。
同時確保在錯誤資訊中添加失敗的權限,這是->assertStatus(201, $permission_xyz_failed_message)中的第二個引數,因為如果它開始失敗,有一個很好的理由,這將增加價值。
uj5u.com熱心網友回復:
你的測驗并不是完全沒有問題:
should而不是if,并使用when。例如,test_if_user_can_create_article_having_articles_index_permission 應該是test_user_can_create_article_when_having_articles_index_permission。
test_if_user_can_create_article不應該做一個回圈,測驗所有的東西(最壞的情況是2個不同的情況),因為如果只有一個失敗,整個測驗就會失敗,這沒有意義,因為所有其他的都通過了,所以它應該只在那個特定的情況/測驗中失敗。所以為了解決這個問題,利用@dataProvider并創建2個不同的測驗,一個斷言它可以創建,一個不能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318650.html
標籤:
上一篇:基于另一個陣列對陣列中的值求和
下一篇:查找圖中樹的數量的演算法是什么?
