PHP:Mockery模拟变量$ user = Auth :: user()

时间:2018-11-16 20:49:00

标签: php laravel mockery

因此,我正在尝试模拟服务方法。

在我的服务文件中:

/**
 * Return all Api Keys for current user.
 *
 * @return Collection
 */
public function getApiKeys(): Collection
{
    $user = Auth::user();

    return ApiKey::where('org_id', $user->organizationId)->get();
}

我该如何嘲笑?

<?php


namespace App\Services;

use PHPUnit\Framework\TestCase;
use Mockery as m;

class ApiKeysServiceTest extends TestCase
{
public function setUp()
{
    parent::setUp();

    /* Mock Dependencies */
}

public function tearDown()
{
    m::close();
}

public function testGetApiKeys()
{
    /* How to test? $user = Auth::user() */
    $apiKeysService->getApiKeys();
}

}

在我的TestCase课堂上,我有:

public function loginWithFakeUser()
{
    $user = new GenericUser([
        'id' => 1,
        'organizationId' => '1234'
    ]);

    $this->be($user);
}

我想做的就是测试此方法。也许这涉及到重组我的代码,以便在该方法中不调用$ user = Auth :: user()。如果是这样,对它应该去哪里有什么想法?

感谢您的反馈。

1 个答案:

答案 0 :(得分:0)

在您的[...] .pipe( map(this.extractTreeData), <== HOW TO PASS VARIABLE 'treeType' TO extractTreeData [...] 方法中,您并没有设置世界。创建一个模拟用户(使用注释testGetApiKeys中的建议的工厂),然后再次使用工厂设置apiKey,然后调用该方法并断言它就是您所设置的。您的代码示例

factory('App\User')->create()

一个很好的测试结构蓝图是:

  • 给我们一些东西(设置所有必需的组件)
  • 如果用户执行了某些操作(访问页面或执行其他操作)
  • 然后确保操作的结果符合您的期望(例如,状态为200)