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)
;