نسخه:

تست: شروع به کار

معرفی

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

به طور پیش فرض، دایرکتوری برنامه شما tests شامل دو دایرکتوری است: Feature و Unit . تست های واحد تست هایی هستند که بر روی بخش بسیار کوچک و جدا شده از کد شما تمرکز می کنند. در واقع، اکثر آزمون‌های واحد احتمالاً بر روی یک روش متمرکز هستند. تست‌های موجود در دایرکتوری آزمایشی "Unit" برنامه لاراول شما را بوت نمی‌کنند و بنابراین نمی‌توانند به پایگاه داده برنامه یا سایر خدمات فریمورک شما دسترسی داشته باشند.

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

یک ExampleTest.php فایل در هر دو دایرکتوری Feature و Unit تست ارائه شده است. پس از نصب یک برنامه جدید لاراول، دستورات vendor/bin/phpunit یا را php artisan test برای اجرای آزمایشات خود اجرا کنید.

محیط

هنگام اجرای تست ها، لاراول به دلیل متغیرهای محیطی که در فایل تعریف شده است، به طور خودکار محیط پیکربندی را تنظیم می کند . لاراول همچنین به طور خودکار جلسه و حافظه پنهان را در هنگام آزمایش برای درایور پیکربندی می‌کند، به این معنی که هیچ جلسه یا داده‌ای از حافظه پنهان در حین آزمایش باقی نمی‌ماند. testing phpunit.xml array

در صورت لزوم می توانید مقادیر پیکربندی محیط آزمایشی دیگر را تعریف کنید. متغیرهای testing محیط ممکن است در فایل برنامه شما پیکربندی شده باشند phpunit.xml ، اما مطمئن شوید که کش پیکربندی خود را با استفاده از config:clear دستور Artisan قبل از اجرای آزمایشات پاک کنید!

فایل .env.testing محیطی

علاوه بر این، می توانید یک .env.testing فایل در ریشه پروژه خود ایجاد کنید. .env هنگام اجرای تست های PHPUnit یا اجرای دستورات Artisan با گزینه ، از این فایل به جای فایل استفاده می شود --env=testing .

صفت CreatesApplication _

لاراول شامل یک CreatesApplication ویژگی است که به کلاس پایه برنامه شما اعمال می شود TestCase . این ویژگی حاوی createApplication روشی است که برنامه لاراول را قبل از اجرای تست های شما بوت استرپ می کند. مهم است که این ویژگی را در محل اصلی خود رها کنید زیرا برخی از ویژگی ها، مانند ویژگی تست موازی لاراول، به آن بستگی دارد.

ایجاد تست

برای ایجاد یک تست جدید، از make:test دستور Artisan استفاده کنید. به طور پیش فرض، تست ها در فهرست قرار می گیرند tests/Feature :

php artisan make:test UserTest

اگر می خواهید یک تست در tests/Unit دایرکتوری ایجاد کنید، می توانید --unit هنگام اجرای make:test دستور از این گزینه استفاده کنید:

php artisan make:test UserTest --unit

اگر می خواهید یک تست Pest PHP ایجاد کنید ، می توانید این --pest گزینه را برای make:test دستور ارائه دهید:

php artisan make:test UserTest --pest
php artisan make:test UserTest --unit --pest

هنگامی که تست تولید شد، می توانید روش های تست را همانطور که معمولاً با استفاده از PHPUnit تعریف می کنید، تعریف کنید . برای اجرای آزمایشات خود، دستور vendor/bin/phpunit یا php artisan test را از ترمینال خود اجرا کنید:

<?php
 
namespace Tests\Unit;
 
use PHPUnit\Framework\TestCase;
 
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_basic_test()
{
$this->assertTrue(true);
}
}

setUp اگر متدهای / خود را tearDown در یک کلاس آزمایشی تعریف می‌کنید، حتماً متدهای parent::setUp() / مربوطه parent::tearDown() را در کلاس والد فراخوانی کنید.

در حال اجرا تست ها

همانطور که قبلا ذکر شد، پس از نوشتن تست ها، می توانید آنها را با استفاده از phpunit :

./vendor/bin/phpunit

علاوه بر phpunit دستور، می توانید از test دستور Artisan برای اجرای تست های خود استفاده کنید. Artisan test runner برای سهولت توسعه و اشکال‌زدایی، گزارش‌های آزمایشی مفصل ارائه می‌کند:

php artisan test

هر آرگومان قابل انتقال به phpunit دستور ممکن است به دستور Artisan نیز منتقل شود test :

php artisan test --testsuite=Feature --stop-on-failure

اجرای تست ها به صورت موازی

به طور پیش فرض، لاراول و PHPUnit تست های شما را به صورت متوالی در یک فرآیند واحد اجرا می کنند. با این حال، ممکن است با اجرای همزمان تست‌ها در چندین فرآیند، مدت زمان اجرای تست‌های خود را تا حد زیادی کاهش دهید. برای شروع، مطمئن شوید که برنامه شما به نسخه ^5.3 یا نسخه بالاتر بسته بستگی دارد nunomaduro/collision . سپس --parallel هنگام اجرای test دستور Artisan گزینه زیر را وارد کنید:

php artisan test --parallel

به‌طور پیش‌فرض، لاراول به تعداد هسته‌های CPU موجود در دستگاه شما، فرآیند ایجاد می‌کند. با این حال، می توانید تعداد فرآیندها را با استفاده از --processes گزینه تنظیم کنید:

php artisan test --parallel --processes=4

هنگام اجرای آزمایش‌ها به صورت موازی، برخی از گزینه‌های PHPUnit (مانند --do-not-cache-result ) ممکن است در دسترس نباشند.

تست موازی و پایگاه داده

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

به‌طور پیش‌فرض، پایگاه‌های داده آزمایشی بین فراخوانی‌های test دستور Artisan باقی می‌مانند تا بتوان با test فراخوانی‌های بعدی دوباره از آنها استفاده کرد. با این حال، می توانید آنها را با استفاده از این گزینه دوباره ایجاد کنید --recreate-databases :

php artisan test --parallel --recreate-databases

قلاب های تست موازی

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

با استفاده از ParallelTesting نما، می‌توانید کدی را برای اجرا بر روی یک فرآیند یا مورد آزمایشی مشخص setUp کنید tearDown . بسته های داده شده به ترتیب، متغیرهای حاوی رمز فرآیند و مورد آزمایش فعلی را دریافت می $token کنند $testCase :

<?php
 
namespace App\Providers;
 
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\ParallelTesting;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
ParallelTesting::setUpProcess(function ($token) {
// ...
});
 
ParallelTesting::setUpTestCase(function ($token, $testCase) {
// ...
});
 
// Executed when a test database is created...
ParallelTesting::setUpTestDatabase(function ($database, $token) {
Artisan::call('db:seed');
});
 
ParallelTesting::tearDownTestCase(function ($token, $testCase) {
// ...
});
 
ParallelTesting::tearDownProcess(function ($token) {
// ...
});
}
}

دسترسی به رمز تست موازی

اگر می‌خواهید از هر مکان دیگری در کد آزمایشی برنامه خود به «توکن» فرآیند موازی فعلی دسترسی داشته باشید، می‌توانید از این token روش استفاده کنید. این توکن یک شناسه رشته منحصر به فرد برای یک فرآیند آزمایشی فردی است و ممکن است برای تقسیم‌بندی منابع در فرآیندهای آزمایشی موازی استفاده شود. به عنوان مثال، لاراول به طور خودکار این نشانه را به انتهای پایگاه داده های آزمایشی ایجاد شده توسط هر فرآیند آزمایش موازی اضافه می کند:

$token = ParallelTesting::token();

گزارش پوشش آزمون

این ویژگی به Xdebug یا PCV نیاز دارد .

هنگام اجرای آزمون‌های برنامه، ممکن است بخواهید تعیین کنید که آیا موارد آزمایشی شما واقعاً کد برنامه را پوشش می‌دهند و چه مقدار از کد برنامه هنگام اجرای آزمایش‌های شما استفاده می‌شود. برای انجام این کار، می‌توانید --coverage هنگام فراخوانی test دستور، این گزینه را ارائه دهید:

php artisan test --coverage

اجرای حداقل آستانه پوشش

می توانید از --min گزینه تعیین حداقل آستانه پوشش آزمون برای برنامه خود استفاده کنید. اگر این آستانه رعایت نشود، مجموعه آزمایشی با شکست مواجه خواهد شد:

php artisan test --coverage --min=80.3