如何在 Laravel 5.2 模型中模拟 Auth
How to mock Auth in a Laravel 5.2 Model
我正在尝试为一个全新的迷你应用程序编写一些单元测试。我通常编写功能测试,所以这是我的分支,尝试通过模拟和存根以及所有使它成为代码的东西来正确地完成它。
模型看起来像这样:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Auth;
class myModel extends Model
{
public static function getUser()
{
$user = \Auth::user();
return $user->adldapUser->cn[0];
}
}
测试:
class MyModelTest extends TestCase
{
public function testGetUser()
{
$mockResult = new StdClass();
$mockResult->adldapUser = new stdClass();
$mockResult->adldapUser->cn=array("test");
$auth = $this->getMock('Auth');
$auth
->method('user')
->will($this->returnValue($mockResult));
$this->assertEquals('test',\App\MyModel::getUser());
}
}
但是当我 运行 单元测试时,我收到以下错误消息:
有 1 个错误:
1) MyModelTest::testGetUser ErrorException: Trying to get property of
non-object
/home/aidan/web/vagrant-web-dev/src/apps/orcid/app/MyModel.php:61
/home/aidan/web/vagrant-web-dev/src/apps/orcid/tests/MyModelTest.php:18
如果我 post 输出 $user,它就是 NULL。
我做错了什么?
我问了半小时后又来回答我自己的问题
为了繁荣,我就把它留在这里。
答案在这个post这里:
所以我用
替换了 $this->getMock
Auth::shouldReceive('user')->once()->andreturn($mockResult);
工作
我是这样用的:
$user -factory(User:class)->create();
\Auth::shouldReceive('guard')->andReturnSelf()
->shouldReceive('user')->andReturn($user)
->shouldReceive('check')->andReturn(true);
我正在尝试为一个全新的迷你应用程序编写一些单元测试。我通常编写功能测试,所以这是我的分支,尝试通过模拟和存根以及所有使它成为代码的东西来正确地完成它。
模型看起来像这样:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Auth;
class myModel extends Model
{
public static function getUser()
{
$user = \Auth::user();
return $user->adldapUser->cn[0];
}
}
测试:
class MyModelTest extends TestCase
{
public function testGetUser()
{
$mockResult = new StdClass();
$mockResult->adldapUser = new stdClass();
$mockResult->adldapUser->cn=array("test");
$auth = $this->getMock('Auth');
$auth
->method('user')
->will($this->returnValue($mockResult));
$this->assertEquals('test',\App\MyModel::getUser());
}
}
但是当我 运行 单元测试时,我收到以下错误消息:
有 1 个错误:
1) MyModelTest::testGetUser ErrorException: Trying to get property of non-object
/home/aidan/web/vagrant-web-dev/src/apps/orcid/app/MyModel.php:61 /home/aidan/web/vagrant-web-dev/src/apps/orcid/tests/MyModelTest.php:18
如果我 post 输出 $user,它就是 NULL。
我做错了什么?
我问了半小时后又来回答我自己的问题
为了繁荣,我就把它留在这里。
答案在这个post这里:
所以我用
替换了 $this->getMockAuth::shouldReceive('user')->once()->andreturn($mockResult);
工作
我是这样用的:
$user -factory(User:class)->create();
\Auth::shouldReceive('guard')->andReturnSelf()
->shouldReceive('user')->andReturn($user)
->shouldReceive('check')->andReturn(true);