Я использую объявление типа возвращаемого значения и обновляю издевательство до версии 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: Return value of Scrappers\ScrapperFactory::getScrapperByUrl() must be an instance of Scrappers\AppScrapperInterface, instance of Mockery_2__Adgate_Components_AppstoreFetchers_Itunes_ITunesScrapper returned.
Я что-то делаю не так или мне нужно указать эту проблему в отчете об ошибке?






Эту ошибку можно решить, используя префикс псевдонима с допустимым именем класса. Как следующее:
$m = m::mock('alias:ITunesScrapper');
Более подробную информацию можно найти в официальной документации http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#aliasing