Перемешивать Laravel с GitHub API Wrapper? - PullRequest
1 голос
/ 19 февраля 2020

Я новичок в издевательстве. Я пытаюсь выяснить это с помощью GitHub API, используя Laravel Package в качестве оболочки. Как я могу издеваться над GitHub::repo()->show('symfony', 'demo');, не затрагивая реальный API? Что-то странное с Фасадами? Я получаю сообщение об ошибке:

In EvalLoader.php(34) : eval()'d code line 993:

  Cannot redeclare Mockery_0_GrahamCampbell_GitHub_Facades_GitHub::shouldReceive()  

Код:

    use Mockery;
    use Tests\TestCase;
    use GrahamCampbell\GitHub\Facades\GitHub;



    public function testExample()
    {
        $this->mockGitHubWith([
            'id' => 1,
            'name' => 'demo',
            'full_name' => 'symfony/demo',
        ]);

        $repo = GitHub::repo()->show('symfony', 'demo');

        dd($repo);
    }

    protected function mockGitHubWith($expectations)
    {
        $github = Mockery::mock(GitHub::class, $expectations);
        $github->shouldReceive('api')->andReturn($github);
        app()->instance(GitHub::class, $github);
    }

также пытался:

use GrahamCampbell\GitHub\Facades\GitHub;

public function testExample()
    {
        Github::shouldReceive('api')->once()->andReturn(['id' => 1]);

        $repo = Github::repo()->show('symfony', 'demo');

        dd($repo);
    }

Возвращает: Mockery\Exception\BadMethodCallException: Method Mockery_0::repo() does not exist on this mock object

Просто для подтверждения, если я удалю строку GitHub::shouldReceive..., она будет успешной, но на самом деле попадет в GitHub API.

1 Ответ

1 голос
/ 20 февраля 2020

С последним примером вы почти у цели. Помните, что вы пытаетесь смоделировать двухэтапный вызов, сначала метод stati c и вызов экземпляра, поэтому имитация должна эмулировать это.

Создайте репозиторий, который будет возвращать вызов repo(). Используя стандартную насмешливую функциональность.

use Github\Api\Repo;

$repoMock = Mockery::mock(Repo::class);
$repoMock->shouldReceive('show')->with('symfony', 'demo')->once()->andReturn(['id' => 1]);

Теперь вы можете установить тип возврата вызова репо через Laravels подход к имитации фасадов.

Github::shouldReceive('repo')->once()->andReturn($repoMock);

Когда вы звоните, ваш репо будет вернуть макет репо, который ожидает показа вызова с параметрами symfony и demo.

$repo = Github::repo()->show('symfony', 'demo');
...