Php 如何在laravel中使用模拟模型方法

Php 如何在laravel中使用模拟模型方法,php,laravel,phpunit,mockery,Php,Laravel,Phpunit,Mockery,我有下面的方法,在该模型中方法正在调用: public function logo($id) { $logo = Event::getDetails( ['logo'], ['id' => $id] )->logo; dd($logo); $logoURL = (isset($logo)) ? url('/') . $logo : NULL; return $logoURL; }

我有下面的方法,在该模型中方法正在调用:

public  function logo($id)
{
    $logo = Event::getDetails(
        ['logo'],
        ['id' => $id]
    )->logo;
dd($logo);
    $logoURL = (isset($logo)) 
        ? url('/') . $logo 
        : NULL;

    return $logoURL;
}
上面的方法正在调用model方法,因此我希望始终返回一个图像作为输出,因此我尝试模拟model方法,如下所示

public static function getDetails(
        array $fields,
        array $where_condition
    ) {
        return Event::select($fields)
            ->where($where_condition)->first();
    }
我这样称呼这个方法

 $this->LogoTraitMock->logo('123');
$logo=Event::getDetails(
['logo'],
['id'=>$id]
)->标志;
所以我试着用下面的方式来模拟这个方法,但不起作用

$mock = Mockery::mock(Event::class)->makePartial();
$mock->shouldReceive('logo')->andReturn($collection);
$result = $mock->getDetails(['logo'], [ 'id'=> '123']);
//dd($result->logo);
$logo = $this->LogoTraitMock->logo('123');
它将返回null而不是image。它不应该进入getDetails方法,但它正在进入

有人能帮忙吗

$result中,我得到了logo的输出,但如何使用logo方法

我是这样调用logo方法的

 $this->LogoTraitMock->logo('123');

你能添加更多关于这个的信息吗?您不模拟任何模型类,您必须使用工厂来创建假数据库数据(然后,由于测试数据库特性,它将被删除)。@matiaslauriti updatedI guess,您需要在
shouldReceive
函数中添加您的函数名<代码>$mock->shouldReceive('getDetails')->withAnyArgs(['logo'])->andReturn($collection)@Jayant获取此错误“ErrorException:尝试获取非对象的属性'logo'”是否可以尝试
$data=new stdClass$数据->徽标='logocontent'
->andReturn($data)