我正在使用Laravel为IOS应用程序构建API。在使用PHPUnit和内置的Laravel测试时,我遇到了严重的问题,无法测试Web应用程序。
我的流程是:1.用户拥有一个账户;2.用户需要进行身份验证才能执行任何操作。
假设我有一组用户,并且一个用户(所有者)可以管理属于他们其中一个组的成员。我想测试用户将其他成员添加到其组的能力。
我有一个名为testAddGroupMemberPass()的测试方法,它应该...
问题在于,在前3个步骤中可能会遇到各种与添加成员到组无关的问题,例如用户名和电子邮件唯一性约束。
那么我的当前方法有什么问题?我一直被告知测试应该完全独立于彼此,因此尝试使用之前测试生成的用户和组是没有意义的。
我的流程是:1.用户拥有一个账户;2.用户需要进行身份验证才能执行任何操作。
假设我有一组用户,并且一个用户(所有者)可以管理属于他们其中一个组的成员。我想测试用户将其他成员添加到其组的能力。
我有一个名为testAddGroupMemberPass()的测试方法,它应该...
- create a user (owner)
- create a group and assign the owner
- create a user to add to the group
assert that the owner has the ability to add that member.
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]); }
问题在于,在前3个步骤中可能会遇到各种与添加成员到组无关的问题,例如用户名和电子邮件唯一性约束。
那么我的当前方法有什么问题?我一直被告知测试应该完全独立于彼此,因此尝试使用之前测试生成的用户和组是没有意义的。
Illuminate\Foundation\Testing\DatabaseTransactions
特性来处理。每个测试后都会执行一个Rollback
。https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test - tptcatTestCase.php
吗?你使用的是哪个版本的Laravel?它肯定会在每个测试之后执行回滚。 - tptcat