Codeception如何测试用户是否具有角色

时间:2014-09-27 20:03:57

标签: testing laravel relationships codeception

我正努力养成在我去的时候写测试的习惯。 我正在使用Laravel 4.2构建一个注册用户的应用程序,并为不同的用户类型分配不同的角色。

我想编写一个测试,检查用户是否有角色。我使用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: $string$integer@example.com
  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没有模型,因为它只是一个数据透视表

如何测试用户是否具有特定角色?

1 个答案:

答案 0 :(得分: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));