مارک پلاس

تکنولوژی نوین اینترنتی

PHPUnit لاراول

دسته‌بندی‌ها

PHPUnit لاراول
PHPUnit لاراول

📜 مقدمه‌ای بر PHPUnit در لاراول

PHPUnit یک فریم‌ورک تست‌نویسی برای زبان PHP است که به شما این امکان را می‌دهد تا تست‌های واحد (Unit Tests) و تست‌های یکپارچه (Integration Tests) را برای کدهای خود بنویسید. در لاراول، PHPUnit به‌طور پیش‌فرض برای انجام تست‌های مختلف موجود است و به راحتی می‌توانید از آن برای تست‌کردن بخش‌های مختلف اپلیکیشن استفاده کنید.

در این مقاله، نحوه استفاده از PHPUnit در لاراول را توضیح خواهیم داد و نحوه نوشتن و اجرای تست‌های مختلف را بررسی می‌کنیم.


1. 🛠 نصب PHPUnit در لاراول

لاراول به‌طور پیش‌فرض پکیج PHPUnit را در خود دارد و نیازی به نصب جداگانه آن نیست. فقط کافی است که در زمان نصب لاراول، PHPUnit به‌طور خودکار به پروژه شما اضافه می‌شود. شما می‌توانید نسخه‌ PHPUnit را در فایل composer.json مشاهده کنید:

json
"require-dev": { "phpunit/phpunit": "^9.0" }

برای نصب این پکیج از دستور زیر استفاده کنید:

bash
composer install --dev

2. 🧑‍💻 ساخت تست در لاراول

در لاراول، شما می‌توانید با استفاده از دستور artisan، تست‌های مختلف را به راحتی ایجاد کنید.

دستور ایجاد تست:

برای ایجاد یک کلاس تست، از دستور زیر استفاده کنید:

bash
php artisan make:test ExampleTest

این دستور یک کلاس تست جدید در مسیر tests/Feature ایجاد می‌کند. اگر بخواهید تست‌های واحد (Unit Test) ایجاد کنید، می‌توانید از دستور زیر استفاده کنید:

bash
php artisan make:test ExampleTest --unit

این دستور تست‌ها را در مسیر tests/Unit ایجاد می‌کند.


3. 📝 نوشتن تست‌ها

در فایل‌های تست ایجاد شده، شما می‌توانید از متدهای PHPUnit برای نوشتن تست‌ها استفاده کنید.

مثال 1: نوشتن یک تست ساده

در فایل tests/Feature/ExampleTest.php می‌توانید یک تست ساده مانند زیر بنویسید:

php
namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase { /** * یک تست ساده برای بررسی دسترسی به صفحه اصلی. * * @return void */ public function test_example() { $response = $this->get('/'); // ارسال درخواست GET به صفحه اصلی $response->assertStatus(200); // بررسی کد وضعیت پاسخ } }

در این مثال، یک درخواست GET به مسیر / ارسال می‌شود و بررسی می‌شود که آیا وضعیت پاسخ ۲۰۰ (OK) است یا خیر.

مثال 2: تست ورودی فرم

اگر بخواهید یک فرم را تست کنید، می‌توانید اطلاعات ورودی ارسال کنید و پاسخ را بررسی کنید.

php
public function test_post_form() { $response = $this->post('/submit-form', [ 'name' => 'John Doe', 'email' => 'john@example.com', ]); $response->assertStatus(302); // بررسی که صفحه به درستی ریدایرکت شده است $response->assertRedirect('/thank-you'); // بررسی ریدایرکت به صفحه تایید }

4. 🧪 انواع تست‌ها

تست‌های Feature

تست‌های Feature برای تست‌های سطح بالاتر مانند تعاملات بین بخش‌های مختلف اپلیکیشن (مثلاً ارسال درخواست‌ها، بررسی پاسخ‌ها و ریدایرکت‌ها) استفاده می‌شوند. این تست‌ها در مسیر tests/Feature ذخیره می‌شوند.

تست‌های Unit

تست‌های Unit برای تست‌های جداگانه و واحد کد (مثل تست یک متد خاص) استفاده می‌شوند. این تست‌ها معمولاً در مسیر tests/Unit قرار دارند و تمرکز دارند بر روی تست منطق و عملکرد دقیق یک بخش از کد.

مثال Unit Test:

php
namespace Tests\Unit; use Tests\TestCase; class ExampleUnitTest extends TestCase { public function test_addition() { $sum = 2 + 2; $this->assertEquals(4, $sum); } }

5. 🏗 اجرای تست‌ها

برای اجرای تست‌ها، کافی است که دستور phpunit را در ترمینال وارد کنید:

bash
./vendor/bin/phpunit

این دستور تمام تست‌های موجود در پوشه tests را اجرا خواهد کرد. اگر می‌خواهید فقط تست‌های یک فایل خاص را اجرا کنید، می‌توانید نام فایل را به دستور بدهید:

bash
./vendor/bin/phpunit tests/Feature/ExampleTest.php

6. 🧑‍💻 تست پایگاه داده

لاراول به شما این امکان را می‌دهد که در تست‌های خود از پایگاه داده نیز استفاده کنید. برای این کار، از ویژگی database migrations لاراول بهره می‌برید.

ساخت پایگاه داده موقتی برای تست‌ها

لاراول به طور خودکار یک پایگاه داده موقتی برای هر تست ایجاد می‌کند. اگر نیاز دارید تا از آن در تست‌های خود استفاده کنید، می‌توانید از متد artisan migrate برای اجرای مایگریشن‌ها استفاده کنید.

php
public function setUp(): void { parent::setUp(); // اجرای مایگریشن‌ها برای تست‌ها $this->artisan('migrate'); }

در این حالت، لاراول به طور خودکار پایگاه داده موقتی را برای تست‌ها تنظیم می‌کند.


7. ⚡ تست‌های Asynchronous

لاراول به شما این امکان را می‌دهد که برای تست‌های مربوط به درخواست‌های غیرهمزمان (Asynchronous) نیز از قابلیت‌هایی مانند assertSee و assertDontSee استفاده کنید.

php
public function test_async_request() { $response = $this->post('/submit', ['data' => 'test']); $response->assertStatus(200); $response->assertSee('Request successful'); }

8. 🛠 استفاده از فیکچرها

فیکچرها در لاراول به شما کمک می‌کنند که داده‌های ساختگی برای تست‌ها تولید کنید. برای استفاده از فیکچرها، می‌توانید از دستور artisan make:factory برای ایجاد یک فیکچر جدید استفاده کنید:

bash
php artisan make:factory UserFactory --model=User

سپس می‌توانید از آن برای تولید داده‌های آزمایشی در تست‌ها استفاده کنید:

php
use App\Models\User; public function test_user_creation() { $user = User::factory()->create(); $this->assertDatabaseHas('users', [ 'email' => $user->email, ]); }

نتیجه‌گیری

PHPUnit در لاراول ابزاری قدرتمند برای نوشتن و اجرای تست‌ها است. با استفاده از این فریم‌ورک، می‌توانید تست‌های واحد و یکپارچه برای اپلیکیشن خود بنویسید و از صحت عملکرد آن اطمینان حاصل کنید. لاراول امکانات مختلفی مانند پایگاه داده موقتی، فیکچرها، و تست‌های مربوط به درخواست‌ها را برای راحت‌تر کردن فرآیند تست‌نویسی فراهم کرده است.

محتوای مرتبط

پست‌های مرتبط