【发布时间】:2020-06-04 02:44:56
【问题描述】:
我是 Mockery 的新手。我试图通过使用 Laravel 包作为包装器来使用 GitHub API 来解决这个问题。我怎样才能模拟 GitHub::repo()->show('symfony', 'demo'); 而不会碰到实际的 API? Facades有什么奇怪的地方吗?我在这里遇到错误:
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