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-мокування.