Спрощене мокування HTTP-відповідей у тестах Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 березня, 2025
Досліджуйте, як Laravel спрощує тестування HTTP-взаємодій за допомогою елегантного синтаксису для фейкових відповідей. Чи готові ви підвищити свою продуктивність у тестуванні, зосередившись на бізнес-логіці? Читайте далі!

Laravel спростив тестування HTTP-взаємодій завдяки елегантному скороченому синтаксису для фейків HTTP-відповідей. Цей підхід суттєво зменшує обсяг коду, роблячи ваші тестові моки більш інтуїтивними.

Основна реалізація пропонує кілька скорочень для типів відповідей:

use Illuminate\Support\Facades\Http;

Http::fake([
    'google.com' => 'Hello World',
    'github.com' => ['foo' => 'bar'],
    'forge.laravel.com' => 204,
]);

Цей синтаксис чудово працює в комплексних тестових сценаріях:

class ApiIntegrationTest extends TestCase
{
    public function testServiceCommunication()
    {
        Http::fake([
            // Відповіді у вигляді рядків
            'api.notifications.com/*' => 'Message sent',
            
            // Відповіді у вигляді масивів (перетворюються на JSON)
            'api.products.com/*' => [
                'products' => [
                    ['id' => 1, 'name' => 'Laptop'],
                    ['id' => 2, 'name' => 'Phone']
                ]
            ],

            // Відповіді зі статус-кодами
            'api.status.com/check' => 200,
            'api.deprecated.com/*' => 410,

            // Різні типи відповідей для пов'язаних кінцевих точок
            'api.orders.com/active' => ['status' => 'processing'],
            'api.orders.com/error' => 400,
            'api.orders.com/message' => 'System unavailable'
        ]);

        // Тестування з перевірками
        $response = Http::get('api.notifications.com/send');
        $this->assertEquals('Message sent', $response->body());

        $products = Http::get('api.products.com/list');
        $this->assertCount(2, $products['products']);

        $status = Http::get('api.status.com/check');
        $this->assertTrue($status->successful());
    }
}

Цей короткий синтаксис значно покращує підтримуваність тестів, зменшуючи когнітивне навантаження під час читання, що дозволяє зосередитися на бізнес-логіці, а не на деталях HTTP-мокування.