使用GitHub API包装器模拟Laravel吗?

问题描述 投票:1回答:1

我是Mockery的新手。我试图通过使用Laravel包作为包装器使用GitHub API来解决这个问题。如何在不使用实际API的情况下模拟GitHub::repo()->show('symfony', 'demo');?外墙有什么奇怪的地方吗?我在这里遇到错误:

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。

php laravel mocking laravel-6 mockery
1个回答
0
投票

在上一个示例中,您快到了。请记住,您正在尝试模拟两步调用,首先是静态方法,然后是对实例的调用,因此,模拟应模拟该调用。

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

[当您调用您的代码存储库时,将返回该存储库模拟,它期望使用参数symfonydemo进行show调用。

$repo = Github::repo()->show('symfony', 'demo');
© www.soinside.com 2019 - 2024. All rights reserved.