Есть ли способ издеваться над ответом и запросом в Guzzle?Макет ответа и использование истории промежуточного программного обеспечения в то же время в Guzzle
У меня есть класс, который отправляет некоторый запрос, и я хочу протестировать.
В Guzzle doc Я нашел способ, как я могу макет ответа и запроса отдельно. Но как я могу их объединить?
Потому что, если стек истории использования используется, жмет попытку отправить реальный запрос. И визовый стих, когда я издеваюсь над обработчиком ответа, не может проверить запрос.
class MyClass {
public function __construct($guzzleClient) {
$this->client = $guzzleClient;
}
public function registerUser($name, $lang)
{
$body = ['name' => $name, 'lang' = $lang, 'state' => 'online'];
$response = $this->sendRequest('PUT', '/users', ['body' => $body];
return $response->getStatusCode() == 201;
}
protected function sendRequest($method, $resource, array $options = [])
{
try {
$response = $this->client->request($method, $resource, $options);
} catch (BadResponseException $e) {
$response = $e->getResponse();
}
$this->response = $response;
return $response;
}
}
Тест:
class MyClassTest {
//....
public function testRegisterUser()
{
$guzzleMock = new \GuzzleHttp\Handler\MockHandler([
new \GuzzleHttp\Psr7\Response(201, [], 'user created response'),
]);
$guzzleClient = new \GuzzleHttp\Client(['handler' => $guzzleMock]);
$myClass = new MyClass($guzzleClient);
/**
* But how can I check that request contains all fields that I put in the body? Or if I add some extra header?
*/
$this->assertTrue($myClass->registerUser('John Doe', 'en'));
}
//...
}
сообщение какой-то код. Описание довольно запутанное. В чем смысл насмешливых запросов? Вы проверяете пользовательские обработчики? –
Я обновил код @AlexBlex. С примером макетного ответа и в документе мы можем проверить запрос. Вопрос: как я могу смешать этот http://docs.guzzlephp.org/en/latest/testing.html#mock-handler и этот http://docs.guzzlephp.org/en/latest/testing.html#history- middleware – xAoc