2014-09-27 44 views
1

我正試圖進入編寫測試的習慣,因爲我去。 我正在使用Laravel 4.2構建一個應用程序,該應用程序註冊用戶併爲不同的用戶類型分配不同的角色。Codeception如何測試用戶是否具有角色

我想編寫一個測試,檢查用戶是否有角色。我正在使用Entrust來管理我的角色/權限和Laracasts/TestDummy來生成虛擬對象。 角色存儲在數據透視表中,所以我基本上測試了多對多關係的存在 TestDummy文檔聲明我需要在fixtures.yml文件中定義我的對象及其關係,並給出示例

Post: 
    title: Hello World $string 
    body: $text 
    published_at: $date 
    author_id: 
    type: Author 

Author: 
    name: John Doe $integer 

上述佈局定義了一對一的關係。一個職位有一位作者。 我試圖來測試是用戶有一定的作用,很多用戶可以有多種角色

我想知道怎樣在我fixtures.yml文件 在我腦海中定義該

如果我想要測試一個多對多的關係(許多用戶有很多角色)我可以像這樣引用它嗎?

Excel\Users\User: 
    username: $string$integer 
    email: [email protected] 
    password: $string 
    created_at: $date 
    updated_at: $date 

\Role: 
    name: $string 
    created_at: $date 
    updated_at: $date 

Assigned_Role: 
    user_id: 
    type: Excel\Users\User 
    role_id: 
    type: \Role 

,我看到它是Assigned_Role沒有一個模式,因爲它僅僅是一個數據透視表

我怎麼能測試,如果用戶具有特定角色的問題?

回答

2

TestDummy只支持生成屬於關係。假設您想要測試User上的方法,例如hasRole($role),您可以嘗試類似這樣的方法。

$user = Factory::create('Excel\Users\User'); 
$role = Factory::create('Role'); 

$user->roles()->attach($role); 
$this->assertTrue($user->hasRole($role)); 

$user->roles()->detach($role); 
$this->assertFalse($user->hasRole($role)); 
+0

Assigned_Role是數據透視表的名稱,沒有附加模型。但是,當我做$ role = Factory :: create('\ Role')時,這完美地工作。感謝您的反饋。 – 2014-09-29 10:42:31

+0

吶喊 - 現在解決了答案! – Dwight 2014-09-29 14:44:56

相關問題