【发布时间】:2016-01-04 23:28:44
【问题描述】:
我正在使用 Laravel 为 IOS 应用程序构建 API。我在使用 PHPUnit 和内置的 Laravel 测试测试 Web 应用程序时遇到了重大问题。
我的流程是 1. 用户有帐户 2. 用户需要经过身份验证才能执行任何操作。
假设我有一组用户,并且一个用户(所有者)可以管理属于其组之一的成员。我想测试用户将其他成员添加到他们的组的能力。
我有一个名为 testAddGroupMemberPass() 的测试方法应该
- 创建用户(所有者)
- 创建组并分配所有者
- 创建要添加到组的用户
-
断言所有者有权添加该成员。
public function testAddGroupMemberPass() { // 1. create owner $owner = factory(User::class)->create(); $token = JWTAuth::fromUser($owner); // 2. create group and attach user $group = new Group; $group->owner_id = $owner->id; $group->save(); // 3. create the member to be $user = factory(User::class)->create(); // 4. attempt attach the member to the group $this->edit('/groups/' . $group->id . '/add-member/' . $user->username . '?token=' . $token) ->seeJson(['success' => true]); }
要断言所有者可以添加用户,您必须首先创建所有者,然后创建组,然后创建要添加到组的用户,最后您才能尝试发出请求到 API 以实际添加该用户。
问题在于,在前 3 个步骤中可能会遇到与将成员添加到组的过程完全无关的各种问题,例如用户名和电子邮件唯一性约束。
那么我目前的方法有什么问题?我一直被告知测试应该完全相互独立,因此尝试使用以前的测试 AFAIK 生成的用户和组是没有意义的。
【问题讨论】:
标签: php unit-testing laravel testing integration-testing