Я пытаюсь создать класс, который запрашивает внешний API. Каждый метод, который соответствует конечной точке, вызывает вызов метода «главного вызова», ответственного за фактическую отправку запроса в API.Тестирование класса в phpspec с использованием Guzzle
Например:
// $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()
на http: createRequest()
и send()
методах?
Когда я издеваться send()
, он говорит: Argument 1 passed to Double\GuzzleHttp\Client\P2::send() must implement interface GuzzleHttp\Message\RequestInterface, null given
, и я не знаю, как обеспечить подделку для этого, потому что создание манекена для этого интерфейса требует, чтобы я реализовать 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');
}
Я думаю, что я пытался что-то подобное. Проблема заключается в том, что если я набираю 'GuzzleHttp \ Message \ RequestInterface $ request' и передаю его' send() ', он скажет:« вам нужно реализовать методы bajillion ». Должен ли я создавать фиктивный класс ниже класса spec, который реализует все эти методы? – johnRivs
Я пробовал этот подход, и теперь мне нужно еще одно. В моем коде мне нужно вернуть '$ this-> http-> send ($ request) -> json()', но phpspec говорит мне, что он не может его найти. На данный момент у меня есть '$ http-> send ($ request) -> json() -> shouldBeCalled()'. – johnRivs
Нужно издеваться над тем, что 'send' возвращает:' $ this-> http-> send ($ request) -> shouldBeCalled() -> willReturn ($ whatever) 'и' $ whatever-> json() -> shouldBeCalled() ' – gvf