【问题标题】:Unit Testing with Mockery return false使用 Mockery 进行单元测试返回 false
【发布时间】:2019-08-02 23:21:57
【问题描述】:

我已经写了这个测试:

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 类中调用 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)); 是返回null

setLog in repository 是这样的:

public function setLog($organizationSlug)
{
    $visitor = new VisitorStatistic();
    $visitor->organization_slug = $organizationSlug;
    $visitor->ip = request()->ip();
    $visitor->url = url()->current();
    $visitor->save();
    return $visitor;
}

【问题讨论】:

  • 你使用的是什么版本的 Laravel?
  • laravel 5.7 版

标签: laravel unit-testing testing mockery


【解决方案1】:

我找到了答案:)

添加andReturn()会返回正确答案

$visitorRepositoryMock->shouldReceive('setLog')->once()->andReturn(new VisitorStatistic());

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 2023-03-10
    • 2017-08-16
    • 1970-01-01
    • 2014-03-15
    • 2020-12-07
    • 1970-01-01
    • 2013-05-26
    • 2016-11-17
    相关资源
    最近更新 更多