Я пытаюсь создать класс, который запрашивает внешний API. Каждый метод, соответствующий конечной точке, вызывает метод «главного вызова», ответственный за фактическую отправку запроса в API.
Например:
// $this->http is Guzzlehttp\Client 5.3
public function call($httpMethod, $endpoint, array $parameters = [])
{
$parameters = array_merge($parameters, [
'headers' => [
'something' => 'something'
]
]);
$request = $this->http->createRequest($httpMethod, $this->baseUrl . $endpoint, $parameters);
return $this->http->send($request);
}
public function getAll()
{
return $this->call('GET', 'all');
}
Над чем я должен издеваться? Должен ли я использовать willBeCalled() и/или willReturn() в методах createRequest() и send() http-клиента?
Когда я имитирую send(), он говорит: Аргумент 1, переданный в Double\GuzzleHttp\Client\P2::send(), должен реализовать интерфейс GuzzleHttp\Message\RequestInterface, задано значение null
и я не уверен, как это сделать, потому что для создания манекена для этого интерфейса мне нужно реализовать 30 методов в этом классе.
Вот тест прямо сейчас:
function it_lists_all_the_things(HttpClient $http)
{
$this->call('GET', 'all')->willBeCalled();
$http->createRequest()->willBeCalled();
$http->send()->willReturn(['foo' => 'bar']);
$this->getAll()->shouldHaveKeyWithValue('foo', 'bar');
}
Подробнее здесь: https://stackoverflow.com/questions/309 ... ing-guzzle