首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Laravel的适当测试流程?

与Laravel的适当测试流程?
EN

Stack Overflow用户
提问于 2016-01-04 23:28:44
回答 1查看 434关注 0票数 4

我正在使用Laravel为IOS应用程序构建API。我遇到的主要问题是使用PHPUnit测试web应用程序和内置的Laravel测试。

我的流程是: 1.用户有一个帐户。2.用户需要经过身份验证才能执行任何操作。

假设我有一组用户组,并且有一个用户(所有者)可以管理属于他们组的成员。我想测试用户将其他成员添加到组中的能力。

我有一个名为testAddGroupMemberPass()的测试方法,它应该

  1. 创建用户(所有者)
  2. 创建一个组并分配所有者
  3. 创建要添加到组中的用户
  4. 断言所有者有能力添加该成员。 公共函数testAddGroupMemberPass() { // 1.创建所有者$owner =工厂(用户::类)->create();$token = JWTAuth::fromUser($owner);// 2.创建组并附加用户$group =新组;$ group -> owner _id = $owner->id;$group->save();// 3.创建成员为$user =工厂(用户::class)->create();// 4.尝试将成员附加到组$this->编辑(‘/ group /’).$group->id。‘/添加-成员/’。$user->username。'?token=‘.$token) ->seeJson(“成功”=> true);}

要断言所有者可以添加用户,您必须首先创建所有者,其次创建组,然后创建要添加到组中的用户,最后您可以尝试向API发出请求以实际添加该用户。

问题是,在前三个步骤中,可能会遇到与将成员添加到组中的过程完全无关的各种问题,例如用户名和电子邮件的唯一约束。

那么,我目前的做法有什么问题呢?我一直被告知,测试应该完全独立于彼此,所以尝试使用以前的测试生成的用户和组是没有意义的AFAIK。

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 01:46:28

您可以将123抽象到一个基本测试类中,并在测试这些特定功能的测试中使用相同的方法。

例如:

代码语言:javascript
复制
// TestCase.php
protected function createOwner()
{
    return factory(User::class)->create();
}

protected function createGroup($owner)
{
    // You didn't show this as a factory, but I figured you might want that
    $group = factory(Group::class)->create();
    $group->owner()->associate($owner);
    $group->save();

    return $group;
}

protected function createUser()
{
    return factory(User::class)->create();
}

// In the file you mention above (should be extending TestCase.php)
public function testAddGroupMemberPass()
{
    // 1. create owner
    $owner = $this->createOwner();
    $token = JWTAuth::fromUser($owner);

    // 2. create group and attach user
    $group = $this->createGroup($owner);

    // 3. create the member to be
    $user = $this->createUser();

    // 4. attempt attach the member to the group
    $this->edit('/groups/' . $group->id . '/add-member/' . $user->username . '?token=' . $token)
         ->seeJson(['success' => true]);
}

这些方法可用于其他测试,如:

代码语言:javascript
复制
// In UserTest.php (also extends TestCase.php)
public function testItCreatesAUser()
{
    $user = $this->createUser();

    $this->seeInDatabase('users', $user);
}

事实是,如果您需要您的世界看起来一定的方式,并且您正在进行某种功能或集成测试,那么您需要在某个地方封装这个逻辑。将其移动到基类将有助于删除重复的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34601742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档