تست مرحله مهمی در چرخه عمر توسعه نرم افزار است. این تضمین می کند که کدی که نوشته اید قبل از اینکه به قسمت بعدی پروژه خود بروید همانطور که طراحی شده است کار می کند. هر بار که نوشتن یک بخش نرم افزاری را به پایان می رسانید، باید یک تست نیز بنویسید تا بررسی کنید که رفتار آن با انتظارات شما مطابقت دارد. این فرآیند به حفظ کیفیت کد شما کمک می کند.
وقتی در مورد تست در لاراول صحبت می کنیم، معمولاً دو چیز را در نظر می گیریم: تست واحد و تست ویژگی. تست واحد فقط بر روی یک قطعه کوچک از کد (معمولاً متدی در داخل یک کلاس) تمرکز میکند، در حالی که تست ویژگی تأیید میکند که آیا یک ویژگی خاص، که ممکن است متشکل از چندین متد یا کلاس در تعامل با یکدیگر باشد، به روشی که شما طراحی کردهاید کار میکند یا خیر. برای آشنایی با مزایا و رویکرد های تست واحد می توانید این مقاله را بررسی کنید.
در این آموزش قصد داریم در مورد نحوه نوشتن تست های واحد در پروژه لاراول با استفاده از Pest، محبوب ترین پکیج تست واحد برای پروژه های PHP صحبت کنیم. به خوبی با لاراول ادغام شده است، بنابراین پس از ایجاد یک پروژه جدید لاراول نیازی به پیکربندی اضافی نیست. البته می توانید از پکیج PHPUnit نیز استفاده کنید ولی در لاراول 11 به صورت پیش فرض از پکیج Pest برای تست نویسی استفاده می شود.
Pest چیست؟
Pest یک فریمورک زیبا برای تست PHP است که نوشتن و اجرای تست ها را آسان می کند. این پکیج بر روی PHPUnit ساخته شده است و از Jest (جاوا اسکریپت) الهام گرفته است، اما یک سینتکس مختصر و رسا برای نوشتن تست ها ارائه می دهد. Pest همچنین دارای تعدادی ویژگی است که آن را به ابزاری قدرتمند برای تست برنامه های PHP تبدیل می کند، مانند:
تست موازی داخلی
گزارش پوشش
حالت تماشا
تست معماری
ابزارهای پروفایل بومی
تست Snapshot
چرا از Pest استفاده کنیم؟
دلایل زیادی برای استفاده از Pest برای تست واحد برنامه های PHP وجود دارد. در اینجا به صورت خلاصه به چند مورد از مزایای آن اشاره می کنیم:
یادگیری و استفاده از آن آسان است. سینتکس مختصر و رسا دارد و نوشتن تست های قابل خواندن و قابل نگهداری را آسان می کند.
سریع و کارآمد است. Pest از PHPUnit در زیر هود استفاده می کند، بنابراین می توانید مطمئن باشید که تست های شما با بیشترین سرعت ممکن اجرا می شوند.
قابل گسترش است. Pest انجمن بزرگ و فعالی دارد، بنابراین افزونهها و افزونههای زیادی برای اضافه کردن عملکرد بیشتر به آزمایشهای شما وجود دارد.
به خوبی مستند شده است. Pest مستندات گسترده ای دارد که شروع و کسب اطلاعات بیشتر در مورد چارچوب را آسان می کند.
چارچوب تست PestPHP چندین مزیت را ارائه می دهد که آن را به یک انتخاب عالی برای آزمایش برنامه های PHP، به ویژه در زمینه پروژه های لاراول تبدیل می کند. در اینجا برخی از مزایای کلیدی استفاده از PestPHP آورده شده است:
سادگی: PestPHP بر سادگی تمرکز دارد و هدف آن ارائه یک تجربه تست لذت بخش است. این یک سینتکس ساده و تمیز ارائه می دهد که خواندن و نوشتن آسان است. این چارچوب شما را تشویق میکند تا تستهایی بنویسید که گویا و ساده باشند، پیچیدگی را کاهش داده و قابلیت نگهداری کد را بهبود میبخشند.
Assertions قدرتمند: PestPHP طیف گسترده ای از assertions قدرتمند از جمله همه در PHPUnit را ارائه می دهد که به شما امکان می دهد تست های مختصر و دقیق بنویسید. این assertions تأیید رفتار و وضعیت برنامه خود را با حداقل تلاش آسان می کند. با PestPHP می توانید انتظارات خود را به صورت طبیعی و خواندنی بیان کنید.
پشتیبانی از توسعه تست محور (TDD): PestPHP برای پشتیبانی از شیوه های توسعه تست محور (TDD) طراحی شده است. این برنامه توسعه دهندگان را تشویق می کند تا قبل از اجرای عملکرد مربوطه، تست بنویسند. با پیروی از رویکرد TDD، می توانید اطمینان حاصل کنید که کد شما به طور کامل تست شده است و منجر به کیفیت بهتر کد و باگ های کمتر می شود.
ادغام با لاراول: PestPHP به طور یکپارچه با لاراول ادغام می شود. از زیرساخت تست لاراول استفاده می کند و ویژگی ها و پیشرفت های اضافی را ارائه می دهد. این ادغام به شما این امکان را می دهد که برنامه های لاراول خود را به طور موثر آزمایش کنید و از قابلیت های خاص لاراول مانند کاشت پایگاه داده، تست HTTP و موارد دیگر بهره ببرید.
تست موازی: PestPHP از تست موازی پشتیبانی می کند و به شما امکان می دهد تست های خود را همزمان اجرا کنید. این ویژگی به طور قابل توجهی زمان کلی اجرای آزمون را کاهش می دهد، به خصوص برای مجموعه های بزرگتر تست. با تست موازی، می توانید کارایی فرآیند تست خود را بهبود بخشید و بازخورد سریع تری در مورد سلامت پایگاه کد خود دریافت کنید.
جامعه و اکوسیستم: PestPHP از یک جامعه فعال و رو به رشد توسعه دهندگان سود می برد. انجمن پشتیبانی، منابع و پلاگینها را فراهم میکند، که پذیرش و استفاده مؤثر از چارچوب را آسانتر میکند.
چگونه از Pest در لاراول استفاده کنیم؟
برای نصب Pest در لاراول از پلاگین Pest برای لاراول استفاده می کنیم که Pest و آن را برای کار با لاراول نصب می کند.
مرحله 1. پروژه لاراول جدید ایجاد کنید
پروژه جدید لاراول را با استفاده از Composer یا Laravel installer ایجاد کنید. نام پروژه را pest-laravel
می گذاریم.
composer create-project laravel/laravel pest-laravel
مرحله 2. دایرکتوری را به pest-laravel
تغییر دهید:
cd pest-laravel
مرحله 3. نصب پکیج ها
Pest یک وابستگی توسعه دهنده است، به این معنی که باید با استفاده از فلگ dev--
نصب شود.
# Install Pest plugin for Laravel
composer require pestphp/pest-plugin-laravel --dev
# Install/Auto Configure Pest in your Laravel project
# will add Pest.php file in your project ./tests directory
php artisan pest:install
اسکریپت تست اختیاری را در composer.json
خود اضافه کنید. این به شما این امکان را می دهد که تست کامپوزر را در ترمینال خود اجرا کنید تا تست های خود را اجرا کنید. توصیه میشود که یک اسکریپت تست را به فایل composer.json
خود اضافه کنید تا توسعهدهندگان دیگر بتوانند تست های شما را فقط با اجرای دستور composer test
اجرا کنند.
پس در فایل: composer.json
خواهیم داشت :
// ...
"scripts": {
"test": "vendor/bin/pest"
}
// ...
مرحله 4. تست ها را اجرا کنید
برای اجرای تست های خود، می توانید از دستور test
Artisan استفاده کنید. Artisan test runner یک پوشش مناسب در اطراف PHPUnit و Pest فراهم می کند که به شما امکان می دهد تست های خود را با استفاده از یک دستور واحد اجرا کنید:
php artisan test
یا می توانید تست ها را با استفاده از دستور composer test
اجرا کنید:
composer test
//or
./vendor/bin/pest
همه این دستورات تست های مشابهی را اجرا می کنند. به طور پیشفرض، فایل phpunit.xml
همراه با برنامه شما به اجرای تست دستور میدهد که تست های موجود در vendor
و node_modules
را حذف کند.
مرحله 5. نمونه تست ها را حذف کنید
پروژه جدید لاراول با چند نمونه تست همراه است. این تست ها در دایرکتوری tests
قرار دارند. در یک پروژه جدید لاراول، دو دایرکتوری در دایرکتوری tests وجود دارد: Feature
و Unit
. آزمایشهای ویژگی ممکن است بخش بزرگتری از کد شما را تست کنند، از جمله نحوه تعامل چندین شی با یکدیگر یا حتی یک درخواست HTTP کامل به نقطه پایانی JSON.
از سوی دیگر، تست های واحد صرفاً بر روی یک کلاس متمرکز هستند. به طور معمول، هر کلاس در برنامه شما دارای یک تست واحد مربوطه است که آن کلاس را جدا از بقیه برنامه تست می کند.
ما نمونه تست های ارائه شده توسط پروژه پیش فرض لاراول را حذف خواهیم کرد. در پوشه tests
فایل های زیر را حذف کنید:
rm tests/Unit/ExampleTest.php
rm tests/Feature/ExampleTest.php
البته این فایل ها برای این وجود دارد که یک دیدی نسبت به تست نویسی در لاراول داشته باشید.
مرحله 6. تست های واحد Pest جدید ایجاد کنید
در این مرحله یک تست واحد جدید برای مدل Product
ایجاد می کنیم. با استفاده از دستور زیر یک مدل Product جدید ایجاد می کنیم:
php artisan make:model Product -m
فراموش نکنید که ویژگی های نام و price
را به فایل migration جدول محصولات اضافه کنید.
// ...
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->decimal('price', 8, 2);
$table->timestamps();
});
}
// ...
سپس با استفاده از دستور زیر migration را اجرا کنید:
php artisan migrate
سپس با استفاده از دستور زیر یک تست واحد جدید برای مدل Product ایجاد می کنیم:
php artisan pest:test ProductModelTest --unit
در این تست واحد ما تست خواهیم کرد که:
مدل محصول دارای ویژگی نام است
مدل محصول دارای ویژگی قیمت است
در فایل: ProductModelTest.php
ما کد زیر را خواهیم داشت:
it('has a name attribute', function () {
$product = new Product([
'name' => 'Product 1'
'price' => 100
]);
expect($product->name)->toBe('Product 1');
expect($product->price)->toBe(100);
});
به طور کلی، این تست واحد بررسی می کند که آیا مدل Product به درستی ویژگی های نام و قیمت را با مقادیر ارائه شده مقداردهی اولیه می کند یا خیر. اگر هر دو انتظار قبول شوند، تست موفق تلقی می شود.
مرحله 7. کنترلر محصول را ایجاد کنید
در این مرحله با استفاده از دستور زیر یک Product Controller جدید ایجاد می کنیم:
php artisan make:controller ProductController --resource
سپس کد زیر را به فایل ProductController.php
اضافه کنید :
<?php
namespace App\Http\Controllers;
use App\Models\Product;
class ProductController extends Controller
{
public function index()
{
$products = Product::all();
return response()->json($products);
}
public function create()
{
$product = new Product([
'name' => 'Product 1',
'price' => 100
]);
$product->save();
return response()->json($product);
}
}
مرحله 8. مسیرهای محصول را به routes/api.php
اضافه کنید
در فایل routes/api.php
خواهیم داشت :
use App\Http\Controllers\ProductController;
Route::get('/products', [ProductController::class, 'index']);
اگر از لاراول 11 استفاده می کنید نیاز است که دستور زیر را اجرا کنید تا فایل api.php
به دایرکتوری routes اضافه شود.
php artisan install:api
مرحله 9. تست های جدید ویژگی Pest را ایجاد کنید
php artisan pest:test ProductTest
در فایل ProductTest
خواهیم داشت:
it('can list products', function () {
getJson('/products')->assertStatus(200);
});
it('can create a product', function () {
$data = [
'name' => 'Product 1',
'price' => 100
];
// 201 http created
postJson('/products/create',$data)->assertStatus(201);
});
it در مقابل تابع test در Pest
تابع it نام مستعار تابع test است. هر دو تابع یکسان هستند و می توانید هنگام نوشتن تست های خود از یکی از آنها استفاده کنید. تابع it برای توسعه دهندگانی که ترجیح می دهند از تابع it هنگام نوشتن تست استفاده کنند ارائه شده است.
مرحله 10. تست ها را اجرا کنید
php artisan test
اگر می خواهید تست خاصی را اجرا کنید، می توانید از گزینه filter--
استفاده کنید:
php artisan test --filter ProductModelTest
برای آشنایی با کد نویسی تمیز در لاراول این مقاله را بررسی کنید.
نتیجه
در این آموزش نحوه راه اندازی و استفاده از چارچوب تست Pest در پروژه لاراول را بررسی کردیم. ما مزایای استفاده از Pest را مورد بحث قرار دادیم، یک چارچوب آزمایشی متمرکز بر سادگی و با الهام از Jest.
با پیروی از دستورالعمل های گام به گام، یاد گرفتید که چگونه Pest را در پروژه لاراول خود نصب کنید، تست ها را با استفاده از دستورات مختلف اجرا کنید و تست های واحد و ویژگی جدید Pest را ایجاد کنید.
تست برنامه های لاراول برای اطمینان از کیفیت و قابلیت اطمینان آنها بسیار مهم است. Pest یک سینتکس بصری و قابلیتهای assertions قدرتمندی را ارائه میکند که فرآیند تست را لذتبخشتر و کارآمدتر میکند. با نوشتن تست با Pest، می توانید کد قابل خواندن و نگهداری ایجاد کنید که صحت عملکرد برنامه لاراول شما را تأیید می کند.
به یاد داشته باشید که تست خود را به طور منظم اجرا کنید تا هر گونه باگ یا مشکلی را در مراحل اولیه توسعه پیدا کنید. تست نه تنها به شناسایی باگ ها کمک میکند، بلکه به پایداری پایگاه کد شما نیز اطمینان میدهد.