Я использую объявление возвращаемого типа и обновляю mockery до версии 1.1, зависит от этот пост но все же, он не работает должным образом.
У меня есть фабрика с методом:
public function getScrapperByUrl($type):AppScrapperInterface
{
$this->validate($type);
switch ($type) {
case self::ITUNES:
return app(ITunesScrapper::class);
break;
case self::PLAYSTORE:
return app(PlayStoreScrapper::class);
break;
default:
throw new AppScraperException("Can't scrap info");
}
}
и в тестах я издеваюсь над поведением ITunesScrapper:
$m = m::mock(ITunesScrapper::class);
$scrapedInfo = [
'name' => "comico",
'downloads' => ""
];
$m->shouldReceive('getOfferAnchor')->with(m::any())->andReturn($scrapedInfo['name']);
$m->shouldReceive('getOfferDownloads')->with(m::any())->andReturn($scrapedInfo['downloads']);
App::instance(ITunesScrapper::class, $m);
а у меня вот такая ошибка
TypeError: возвращаемое значение Scrappers\ScrapperFactory::getScrapperByUrl() должно быть экземпляром Scrappers\AppScrapperInterface, возвращаемым экземпляром Mockery
_Adgate_Components_AppstoreFetchers_Itunes_ITunesScrapper.$m = m::mock(ITunesScrapper::class); $scrapedInfo = [ 'name' => "comico", 'downloads' => "" ]; $m->shouldReceive('getOfferAnchor')->with(m::any())->andReturn($scrapedInfo['name']); $m->shouldReceive('getOfferDownloads')->with(m::any())->andReturn($scrapedInfo['downloads']); App::instance(ITunesScrapper::class, $m);
Я делаю что-то не так или мне нужно обратиться с этой проблемой в отчет об ошибке?