آموزش استفاده از Laravel Dusk

Laravel Dusk یکی از ویژگی های جدید در لاراول 5.4 اضافه شد. Laravel Dusk یک ابزار برای تست نرم افزار (اسکریپت) است.

یکی از چالش هایی که در استفاده از PHPUnit وجود داشت اینه که شما نمی توانید نرم افزار با جاوا اسکریپت تست کنید برای مثال یک قسمت در سایت دارید که با کد جاوا اسکریپت اطلاعات فرم ارسال میشه و در callback اون به کاربر یک پیغام نمایش داده می شه شما با Laravel Dusk به راحتی می توانید تست های خود را انجام دهید.

زمانی که از Laravel Dusk برای آزمایش نرم افزار استفاده می کنید سایت در مرورگر باز میشه بنابراین به راحتی می توانید کدهای JavaScript داخل سایت را تست کنید.

چرا Dusk؟

در نسخه قبلی لاراول از BrowserKit برای عملیات تست استفاده می‌ کرد و محدودیت‌ های زیادی داشت اما در نسخه ۵٫۴ Dusk که قابلیت‌های بیشتری داره و عملیات تست رو طبیعی تر کرده استفاده میشه . یکی از ویژگی‌های جالبی که اضافه شده اینه که میتونه تا انجام شدن یک شرط در Front end منتظر بمونه مثلا میتونه منتظر بمونه تا یک کامپوننت جاوااسکریپت بارگزاری بشه و بعد ادامه تست رو انجام بده.

نصب و راه اندازی Laravel Dusk

برای شروع یک پروژه جدید با لاراول ایجاد می کنیم:

laravel new dusk

سپس به دایرکتوری laravel/dusk برید و پکیچ زیر را نصب کنید:

cd dusk
composer require laravel/dusk

برای جلوگیری از وقوع یکسری مشکلات امنیتی با استفاده از کد زیر مشخص می کنیم که تست در حالت محلی انجام شود نه production:

use Laravel\Dusk\DuskServiceProvider;// Importing DuskServiceProvider class

...

public function register()
{
    if ($this->app->environment('local', 'testing')) {
        $this->app->register(DuskServiceProvider::class);
    }
}

در مرحله بعد کد زیر را اجرا کنید تا Dusk نصب شود:

php artisan dusk:install

این دستور یک دایرکتوری با نام Browser در داخل دایرکتوری tests می سازه و یک example ساده ایجاد می کنه.

همچنین فولدر screenshots در Browser  اضافه شده که هروقت تست شما منجر به خطا شد بصورت اتوماتیک یک عکس از محتوای نمایش داده شده در مرورگر شما میگیره و در این فولدر ذخیره میکنه.

خوب حالا نیاز دارید کلید APP_URL از فایل env. پروژه تون رو آپدیت کنید و Url پروژه رو بنویسید برای مثال http://localhost:8000

خب حالا دستور php artisan serve رو اجرا کنید.

اجرای تست مثال پیش فرض Dusk

برای اجرای تست دستور زیر را اجرا کنید:

php artisan dusk

اگر فایل tests\Browser\ExampleTest.php  رو باز کنید کدهای زیر رو می بینید:

...
public function testBasicExample()
    {
    //Visit the homepage and look for the text 'Laravel'
        $this->browse(function (Browser $browser) {
            $browser->visit('/')
                    ->assertSee('Laravel');
        });
    }

همونطور که می بینید متد ()visit یک پارامتر ورودی برای آدرس Url داره و این آدرس رو باز می کنه جلوتر تابع ()assertSee رو داریم که چک میکنه متن ورودیش در مسیری که باز شده وجود داره یا خیر. دستورات و توابع بیشتر در این مورد رو اینجا پیدا می کنید !

در مثال بالا صفحه ی خانه پیمایش میشه و متن Laravel جستجو میشه .

RL8oreVSRj2gYclI5fAO_failure-testBasicExample-0.png (1034×655)

یک مثال ساده و کاربردی با Dusk

با Dusk میتونید با فرم ها و تایید هویت (Auth) رو هم تست کنید. خب حالا یک تست کوچک در این مورد انجام میدیم . برای شروع کدهای پیشفرض Auth لاراول رو صدا میزنیم. اول اطلاعات دیتابیستون رو در فایل env. تکمیل کنید و دستور زیر رو بزنید:

php artisan make:auth

اگر از MariaDB استفاده میکنید یا ورژن Mysql پایین تر از ۵٫۷٫۷ هست فایل app\Providers\AppServiceProvider.php  رو به صورت زیر تغییر بدید:

use Illuminate\Support\Facades\Schema;



public function boot()

{

    Schema::defaultStringLength(191);

}

حالا دستور php artisan migrate رو اجرا کنید .

 اگر وارد صفحه اصلی پروژه بشید صفحات Register و Login اضافه شده.

حالا با استفاده از دستور زیر یک تست جدید میسازیم:

php artisan dusk:make RegisterTest

وارد مسیر tests\Browser\RegisterTest.php بشید و تابع ()testExample رو بصورت زیر تغییر بدید :

public function testExample()
    {
        $this->browse(function ($browser) {
            $browser->visit('/') //Go to the homepage
                    ->clickLink('Register') //Click the Register link
                    ->assertSee('Register') //Make sure the phrase in the arguement is on the page
            //Fill the form with these values
                    ->value('#name', 'Joe') 
                    ->value('#email', '[email protected]')
                    ->value('#password', '123456')
                    ->value('#password-confirm', '123456')
                    ->click('button[type="submit"]') //Click the submit button on the page
                    ->assertPathIs('/home') //Make sure you are in the home page
            //Make sure you see the phrase in the arguement
                    ->assertSee("You are logged in!"); 
        });
    }

حالا دستور php artisan dusk رو برای شروع تست اجرا کنید.مشاهده می کنید که  بصورت خودکار فرم ثبت نام مقدار دهی می شود و فرم submit می شود.

نویسنده مطلب
علی پامناری

دیدگاه کاربران

  • وب افرا
    6 سال, 8 ماه پیش
    آموزش خوب و کاربردی بود ، ممنون از شما .یه سوال کوچیک داشتم : آیا این مورد برای Vue Router هم قابل پیاده سازیه ؟ یعنی بشه باهاش وب اپلیکیشن ها SPA رو هم تست کرد ؟
    • علی پامناری
      6 سال, 8 ماه پیش
      خواهش می کنم. بله می تونید خود doc لاراول مثال هم زده https://laravel.com/docs/5.5/dusk#making-vue-assertions

این وب سایت متعلق است به آذین وب (طراحی سایت در اصفهان) و تمامی حقوق آن محفوظ است.

طـبق ماده 12 فصل سوم قانون جرائم رایانه ای هرگونه کپی برداری از قالب پیگرد قانونی دارد.