Класс MockResponse
Класс MockResponse используется в тестах для имитации
ответа от внешнего HTTP-сервиса. Он передаётся в
MockHttpClient
и позволяет задать тело ответа, статус-код и заголовки.
Первым параметром конструктора идёт содержимое тела ответа,
вторым - HTTP-статус, третьим - массив заголовков.
Синтаксис
new MockResponse(string $body = '', int $status = 200, array $headers = [])
Пример
Давайте создадим мок-ответ с телом 'abcde' и статусом 200:
<?php
namespace AppTestsService;
use PHPUnitFrameworkTestCase;
use SymfonyComponentHttpClientResponseMockResponse;
class ArticleServiceTest extends TestCase
{
public function testIndex(): void
{
$response = new MockResponse('abcde', ['status' => 200]);
echo $response->getContent();
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте зададим статус-код и заголовок ответа:
<?php
namespace AppTestsService;
use PHPUnitFrameworkTestCase;
use SymfonyComponentHttpClientResponseMockResponse;
class ArticleServiceTest extends TestCase
{
public function testStatus(): void
{
$response = new MockResponse('user', [
'status' => 404,
'headers' => ['Content-Type' => 'application/json'],
]);
echo $response->getStatusCode();
}
}
?>
Результат выполнения кода:
404
Пример
Давайте используем MockResponse вместе с
MockHttpClient
для имитации внешнего запроса:
<?php
namespace AppTestsService;
use PHPUnitFrameworkTestCase;
use SymfonyComponentHttpClientMockHttpClient;
use SymfonyComponentHttpClientResponseMockResponse;
class ArticleServiceTest extends TestCase
{
public function testExternalApi(): void
{
$mockResponse = new MockResponse('hello', ['status' => 200]);
$client = new MockHttpClient($mockResponse);
$response = $client->request('GET', 'https://example.com/api');
echo $response->getContent();
}
}
?>
Результат выполнения кода:
"hello"
Смотрите также
-
класс
MockHttpClient,
который имитирует HTTP-клиент в тестах -
класс
HttpBrowser,
который эмулирует браузер для функциональных тестов -
метод
request,
который выполняет HTTP-запрос в тесте -
метод
getResponse,
который возвращает объект ответа после запроса