我是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。
在上一个示例中,您快到了。请记住,您正在尝试模拟两步调用,首先是静态方法,然后是对实例的调用,因此,模拟应模拟该调用。
创建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
进行show调用。
$repo = Github::repo()->show('symfony', 'demo');