издевательство над PHP 7 и возвращаемыми типами

Я использую объявление возвращаемого типа и обновляю 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

$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);
_Adgate_Components_AppstoreFetchers_Itunes_ITunesScrapper.

Я делаю что-то не так или мне нужно обратиться с этой проблемой в отчет об ошибке?


person Bogdan Dubyk    schedule 22.05.2018    source источник


Ответы (1)


Эту ошибку можно решить, используя префикс псевдонима с допустимым именем класса. Как следующее:

$m = m::mock('alias:ITunesScrapper');

Дополнительную информацию можно найти в официальной документации http://docs.mockery.io/en/latest/reference/creating_test_doubles.html#aliasing

person George Garcés    schedule 29.05.2018