使用 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());