使用 Mockery 进行单元测试 return false
Unit Testing with Mockery return false
我写了这个测试:
public function testSetVisitorLog()
{
$visitorRepositoryMock = Mockery::mock('App\Repositories\VisitorStatisticRepository');
$this->app->instance('App\Repositories\VisitorStatisticRepository',$visitorRepositoryMock);
$visitorRepositoryMock->shouldReceive('setLog')->once();
$visitorAction = new VisitorStatisticAction($visitorRepositoryMock);
$this->assertEquals(true,$visitorAction->setLog('fars'));
}
我使用字符串输入
在 VisitorStatisticAction class 中调用 setLog
在 VisitorStatisticAction 中我有这个:
public function setLog($organizationSlug)
{
dd($this->repository->setLog($organizationSlug));
if (!$this->repository->setLog($organizationSlug)) {
return false;
}
return true;
}
我不知道为什么 dd($this->repository->setLog($organizationSlug));
是 return null
存储库中的 setLog 是这样的:
public function setLog($organizationSlug)
{
$visitor = new VisitorStatistic();
$visitor->organization_slug = $organizationSlug;
$visitor->ip = request()->ip();
$visitor->url = url()->current();
$visitor->save();
return $visitor;
}
我找到了答案:)
添加 andReturn()
并且 returns 正确答案
$visitorRepositoryMock->shouldReceive('setLog')->once()->andReturn(new VisitorStatistic());
我写了这个测试:
public function testSetVisitorLog()
{
$visitorRepositoryMock = Mockery::mock('App\Repositories\VisitorStatisticRepository');
$this->app->instance('App\Repositories\VisitorStatisticRepository',$visitorRepositoryMock);
$visitorRepositoryMock->shouldReceive('setLog')->once();
$visitorAction = new VisitorStatisticAction($visitorRepositoryMock);
$this->assertEquals(true,$visitorAction->setLog('fars'));
}
我使用字符串输入
在 VisitorStatisticAction class 中调用 setLog在 VisitorStatisticAction 中我有这个:
public function setLog($organizationSlug)
{
dd($this->repository->setLog($organizationSlug));
if (!$this->repository->setLog($organizationSlug)) {
return false;
}
return true;
}
我不知道为什么 dd($this->repository->setLog($organizationSlug));
是 return null
存储库中的 setLog 是这样的:
public function setLog($organizationSlug)
{
$visitor = new VisitorStatistic();
$visitor->organization_slug = $organizationSlug;
$visitor->ip = request()->ip();
$visitor->url = url()->current();
$visitor->save();
return $visitor;
}
我找到了答案:)
添加 andReturn()
并且 returns 正确答案
$visitorRepositoryMock->shouldReceive('setLog')->once()->andReturn(new VisitorStatistic());