استفاده از Http::assertNotSent() در لاراول 11

laravel 11 http assert not sent
28 آذر 1403

معرفی متد assertNotSent در فریم‌ورک Laravel 11


وقتی که ما در حال توسعه نرم‌افزار با استفاده از لاراول هستیم، بررسی درخواست‌های HTTP که به سمت سرور ارسال می‌شوند، یکی از مهم‌ترین جنبه‌ها برای اطمینان از عملکرد صحیح اپلیکیشن است. در لاراول 11، متد Http::assertNotSent() به ما این امکان را می‌دهد تا تایید کنیم که یک درخواست خاص HTTP ارسال نشده است. یعنی اگر ما بخواهیم اطمینان حاصل کنیم که یک درخواست به URL مشخصی ارسال نشده، می‌توانیم از این متد استفاده کنیم.


این متد به طور ویژه در تست‌های واحد (Unit Tests) و آزمون‌های ویژگی (Feature Tests) کاربرد دارد. به عبارتی وقتی شما یک تابع یا ویژگی خاص را تست می‌کنید، می‌خواهید بررسی کنید که آیا طبق شرایط خاصی، درخواست‌های غیر منتظره ارسال نشده‌اند. این موضوع بسیار مهم است چرا که اطمینان می‌دهد کد شما رفتار صحیحی را در سناریوهای مختلف دارد.


برای استفاده از Http::assertNotSent()، ابتدا باید آن را درون کد تست خود قرار دهید. بدین صورت که بعد از اجرای عملیاتی که باید منجر به عدم ارسال درخواست شود، این متد را فراخوانی می‌کنید. اگر درخواست مورد نظر ارسال شده باشد، تست با خطا مواجه خواهد شد و این نشان‌دهنده‌ی وجود اشکال در کد شما است.


علاوه بر این، شما می‌توانید فیلترهای مختلفی را بر روی درخواست‌ها اعمال کنید تا فقط درخواست‌های خاصی را مورد بررسی قرار دهید. به عنوان مثال می‌توانید بررسی کنید که آیا درخواست با متد مشخصی (مثل GET یا POST) ارسال نشده یا اینکه آیا پارامترهای خاصی را شامل نمی‌شود.


نمونه کد برای استفاده از Http::assertNotSent()


public function test_example()
{
Http::fake(); // فیک کردن درخواست‌های HTTP

// فراخوانی تابع یا عملیاتی که نباید درخواست HTTP را ارسال کند
$response = $this->someFunction();

// اطمینان از اینکه درخواست خاصی ارسال نشده است
Http::assertNotSent(fn ($request) => $request->url() === 'http://example.com/api/not-allowed');
}

توضیحات کد



public function test_example()
این خط نشان‌دهنده شروع تابع تست است که به طور خاص برای بررسی عملکرد یک ویژگی نوشته شده است.

Http::fake();
با این خط، ما همه درخواست‌های HTTP را فیک می‌کنیم تا از تماس واقعی با سرور جلوگیری کنیم.

$response = $this->someFunction();
در اینجا، ما تابع یا عملکردی را فراخوانی می‌کنیم که باید بررسی کنیم که آیا درخواست HTTP ارسال کرده یا خیر.

Http::assertNotSent(fn ($request) => $request->url() === 'http://example.com/api/not-allowed');
این خط اطمینان می‌دهد که درخواست به URL مشخصی ارسال نشده است، در غیر این صورت تست با خطا مواجه می‌شود.

سوالات متداول

؟

متد assertNotSent در لاراول چیست؟

؟

چگونه می‌توانم از این متد در تست‌های خود استفاده کنم؟

؟

آیا می‌توانم فیلترهایی بر روی assertNotSent اعمال کنم؟