Laravel додає потужний інструмент для відлагодження HTTP з методом Http::record(), який дозволяє вам перевіряти реальні HTTP запити, зберігаючи при цьому зв'язок зі справжніми зовнішніми сервісами.
use Illuminate\Support\Facades\Http;
// Розпочніть записування HTTP взаємодій
Http::record();
// Виконуйте реальні HTTP запити
Http::get('https://example.com/api/users');
Http::post('https://example.com/api/orders', ['product_id' => 123]);
// Отримайте доступ до записаних запитів та відповідей
Http::recorded(function ($request, $response) {
// Аналізуйте деталі запитів та відповідей
});
На відміну від Http::fake(), що блокує зовнішній зв'язок, цей метод забезпечує прозорість реальних запитів, дозволяючи їм виконуватись нормально.
public function testProductApiIntegration()
{
// Розпочніть записування HTTP взаємодій
Http::record();
// Виконайте реальну операцію, яка здійснює API виклики
$result = $this->app->make(ProductService::class)->syncWithExternalApi();
// Перевірте успішність операції
$this->assertTrue($result);
// Тепер перевірте HTTP взаємодії
$apiCallCount = 0;
$allStatusCodesSuccessful = true;
Http::recorded(function ($request, $response) use (&$apiCallCount, &$allStatusCodesSuccessful) {
$apiCallCount++;
// Перевірте статус відповіді
if ($response->status() >= 400) {
$allStatusCodesSuccessful = false;
}
// Логування взаємодії для відладки
Log::debug('API Call', [
'url' => $request->url(),
'method' => $request->method(),
'status' => $response->status()
]);
});
$this->assertGreaterThan(0, $apiCallCount, 'Не було здійснено жодних API викликів');
$this->assertTrue($allStatusCodesSuccessful, 'Декілька API викликів завершились невдало');
}
Цей підхід є безцінним для інтеграційного тестування, відладки зовнішніх API комунікацій, аудиту використання API та моніторингу продуктивності сторонніх сервісів — і все це без переривання звичайного функціонування вашого застосунку. Забезпечуючи можливість перевірки без модифікацій, метод Http::record() заповнює важливу прогалину між повністю зміненими тестами та неконтрольованими живими API взаємодіями.