مارک پلاس

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

نحوه تست APIها با Laravel Dusk

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

نحوه تست APIها با Laravel Dusk

🚀 آموزش تست APIها با Laravel Dusk


Laravel Dusk ابزاری برای تست خودکار صفحات وب در محیط مرورگر واقعی (با استفاده از ChromeDriver) است. اما می‌تونیم ازش برای تست APIها هم استفاده کنیم، به‌ویژه زمانی که API در قالب UI یا فرم‌ها فراخوانی می‌شه.


✅ 1. نصب Laravel Dusk

bash
composer require --dev laravel/dusk php artisan dusk:install

✅ 2. ساخت اولین تست Dusk

bash
php artisan dusk:make ApiTest

این فایل در مسیر زیر ساخته می‌شه:

swift
tests/Browser/ApiTest.php

🧪 3. شبیه‌سازی درخواست API با فرم یا JavaScript

اگه API شما از طریق یک فرم HTML یا دکمه با AJAX فراخوانی می‌شه، می‌تونی با Dusk همون رفتار رو شبیه‌سازی کنی.

مثال: تست API لاگین

فرض کن یک دکمه در صفحه لاگین داریم که به /api/login درخواست POST می‌فرسته:

php
public function test_login_api() { $this->browse(function (Browser $browser) { $browser->visit('/login-page') ->type('email', 'test@example.com') ->type('password', 'password') ->press('Login') ->waitForText('Welcome') ->assertSee('Welcome'); }); }

🔎 این روش برای تست APIهایی که از طریق مرورگر فرستاده می‌شن (فرم یا JavaScript) بسیار کاربردیه.


⚠️ اگر API صرفاً JSON پاسخ می‌ده چطور؟

Dusk برای این سناریو مناسب نیست چون مرورگر UI محور هست. بهتره از Laravel HTTP Test استفاده کنی:

php
public function test_api_login_response() { $response = $this->postJson('/api/login', [ 'email' => 'test@example.com', 'password' => 'password', ]); $response->assertStatus(200) ->assertJsonStructure(['token']); }

📌 برای این نوع تست‌ها بهتره از تست‌های معمول Feature یا API استفاده کنی، نه Dusk.


💡 نکات مفید

نکتهتوضیح
اجرای تستphp artisan dusk
اجرای فقط یک تستphp artisan dusk tests/Browser/ApiTest.php
مشاهده مرورگردر تست‌های شکست خورده، Dusk اسکرین‌شات می‌گیره
پاک‌سازی داده‌هااز DatabaseMigrations در تست‌ها استفاده کن

🧰 ترکیب Dusk با Mock API (Fake API)

اگر می‌خوای بدون زدن درخواست واقعی API رو تست کنی، می‌تونی از کتابخونه‌هایی مثل Mock Service Worker استفاده کنی تا پاسخ API رو فیک‌سازی کنی داخل مرورگر.


📦 جمع‌بندی

سناریوابزار مناسب
تست API با فرم✅ Laravel Dusk
تست API صرفاً JSON✅ Feature Test (postJson)
تست کلاینت JavaScript✅ Dusk + JavaScript
شبیه‌سازی مرورگر واقعی✅ فقط با Dusk ممکنه


✅ تست کامل Dusk برای API ورود و CRUD در لاراول


🔧 پیش‌نیاز:

فرض می‌گیریم:

  • مسیر ورود /login

  • مسیر لیست پست‌ها /posts

  • فرم ایجاد پست، ورودی‌هایی به نام title و body داره.

  • فرم و عملیات‌ها از طریق رابط گرافیکی HTML انجام می‌شن (نه صرفاً API خام).


🧪 ساخت تست:

bash
php artisan dusk:make PostCrudTest

✍️ محتوای فایل tests/Browser/PostCrudTest.php

php
<?php namespace Tests\Browser; use Laravel\Dusk\Browser; use Tests\DuskTestCase; use App\Models\User; use Illuminate\Foundation\Testing\DatabaseMigrations; class PostCrudTest extends DuskTestCase { use DatabaseMigrations; public function test_user_can_login_and_crud_post() { // ایجاد کاربر تستی $user = User::factory()->create([ 'email' => 'user@example.com', 'password' => bcrypt('password'), ]); $this->browse(function (Browser $browser) use ($user) { // 🟢 ورود به سایت $browser->visit('/login') ->type('email', $user->email) ->type('password', 'password') ->press('ورود') ->assertPathIs('/dashboard') ->assertSee('خوش آمدید'); // 🟡 رفتن به صفحه پست‌ها $browser->visit('/posts') ->assertSee('لیست پست‌ها'); // 🔵 ایجاد یک پست جدید $browser->click('@create-post-button') // دکمه با Dusk selector ->type('title', 'پست تستی') ->type('body', 'این یک محتوای تستی است.') ->press('ثبت پست') ->waitForText('پست با موفقیت ثبت شد') ->assertSee('پست تستی'); // 🟠 ویرایش پست $browser->click('@edit-post-1') // فرض کنیم پست ID=1 داره ->type('title', 'پست ویرایش شده') ->press('بروزرسانی') ->waitForText('پست بروزرسانی شد') ->assertSee('پست ویرایش شده'); // 🔴 حذف پست $browser->click('@delete-post-1') ->waitForText('پست حذف شد') ->assertDontSee('پست ویرایش شده'); }); } }

🧩 نکته: استفاده از Dusk Selectors در HTML

در HTML باید المان‌هایی که قراره Dusk پیدا کنه، Selector داشته باشن:

html
<button dusk="create-post-button">ایجاد پست</button> <a dusk="edit-post-1">ویرایش</a> <button dusk="delete-post-1">حذف</button>

✅ اجرای تست

bash
php artisan dusk

یا فقط تست خاص:

bash
php artisan dusk tests/Browser/PostCrudTest.php

📦 خلاصه عملیات تست شده:

عملیاتبا چه چیزی تست شد؟
ورودفرم لاگین با Dusk
ایجاد پستپر کردن فرم و ارسال
ویرایش پستکلیک روی لینک و بروزرسانی فرم
حذف پستکلیک روی دکمه حذف و بررسی تغییرات

محتوای مرتبط

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