PHP: 嘲讽模拟变量 $user = Auth::user()
PHP: Mockery Mock variable $user = Auth::user()
所以,我正在尝试模拟一个服务方法。
在我的服务文件中:
/**
* 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();
}
}
在我的测试用例中 class 我有:
public function loginWithFakeUser()
{
$user = new GenericUser([
'id' => 1,
'organizationId' => '1234'
]);
$this->be($user);
}
我想做的是测试这个方法。也许这涉及重组我的代码,以便在方法中不调用 $user = Auth::user() 。如果是这种情况,关于它应该去哪里有什么想法吗?
感谢您的反馈。
在您的 testGetApiKeys
方法中,您并不是在设置世界。创建一个模拟用户(使用注释 factory('App\User')->create()
中建议的工厂),然后使用工厂再次设置 apiKey,然后调用该方法并断言它是您设置的。您的代码示例
public function loginWithFakeUser()
{
$user = factory('App\User')->create();
$this->be($user);
}
public function testApiSomething()
{
$this->loginWithFakeUser();
// do something to invoke the api...
// assert results
}
一个好的测试结构蓝图是:
- 假设我们有东西(设置所有需要的组件)
- 如果用户执行某些操作(访问页面或其他)
- 然后确保操作的结果是您期望的(例如状态为 200)
所以,我正在尝试模拟一个服务方法。
在我的服务文件中:
/**
* 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();
}
}
在我的测试用例中 class 我有:
public function loginWithFakeUser()
{
$user = new GenericUser([
'id' => 1,
'organizationId' => '1234'
]);
$this->be($user);
}
我想做的是测试这个方法。也许这涉及重组我的代码,以便在方法中不调用 $user = Auth::user() 。如果是这种情况,关于它应该去哪里有什么想法吗?
感谢您的反馈。
在您的 testGetApiKeys
方法中,您并不是在设置世界。创建一个模拟用户(使用注释 factory('App\User')->create()
中建议的工厂),然后使用工厂再次设置 apiKey,然后调用该方法并断言它是您设置的。您的代码示例
public function loginWithFakeUser()
{
$user = factory('App\User')->create();
$this->be($user);
}
public function testApiSomething()
{
$this->loginWithFakeUser();
// do something to invoke the api...
// assert results
}
一个好的测试结构蓝图是:
- 假设我们有东西(设置所有需要的组件)
- 如果用户执行某些操作(访问页面或其他)
- 然后确保操作的结果是您期望的(例如状态为 200)