Laravel 11 / Foundation RefreshDatabase::beforeRefreshingDatabase()

laravel 11 refreshdatabase before refreshing database
22 اردیبهشت 1404

آشنایی با روش RefreshDatabase

در لاراول، نوشتن تست‌ها بخش بسیار مهمی از فرایند توسعه نرم‌افزار است. یکی از کارهایی که باید در هنگام نوشتن تست‌ها انجام شود، بررسی وضعیت پایگاه‌داده پیش از انجام تست‌ها است. در این راستا، متد RefreshDatabase::beforeRefreshingDatabase() به شما کمک می‌کند تا پیش از بازسازی پایگاه‌داده، اقداماتی خاص انجام دهید. این متد به‌خصوص برای تنظیمات و نیازهای خاص تست‌ها بسیار کاربردی است.

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

متد beforeRefreshingDatabase() به عنوان یک هوک (hook) عمل کرده و به شما این امکان را می‌دهد که منطق دلخواه خود را در مواقع ضروری پیاده‌سازی کنید. این می‌تواند به‌ویژه برای زمان‌هایی که به داده‌های خاصی نیاز دارید یا می‌خواهید شرایط خاصی را برای آغاز تست فراهم کنید، بسیار مفید باشد.

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

نمونه کد


class YourTest extends TestCase {
use RefreshDatabase;

protected static function beforeRefreshingDatabase()
{
// کد مخصوص برای تنظیم داده‌های اولیه
User::factory()->create([
'name' => 'Test User',
'email' => '[email protected]',
]);
}
}

توضیح خط به خط کد

class YourTest extends TestCase {
این خط، کلاسی به نام YourTest را تعریف می‌کند که از TestCase ارث‌بری می‌کند.

use RefreshDatabase;
با این خط، ویژگی RefreshDatabase را برای کلاسمان اضافه می‌کنیم تا پایگاه‌داده به‌طور خودکار قبل از هر تست بازسازی شود.

protected static function beforeRefreshingDatabase() {
این خط روش beforeRefreshingDatabase را تعریف می‌کند که قبل از بازسازی پایگاه‌داده فراخوانی می‌شود.

User::factory()->create(...);
این خط، یک کاربر جدید را با استفاده از کارخانه (factory) برای مدل User ایجاد می‌کند. شما می‌توانید هر مقدار مورد نظر خود را در اینجا مشخص کنید.

}
این علامت، انتهای متد را مشخص می‌کند.

}
این علامت، انتهای کلاس را مشخص می‌کند.

سوالات متداول

؟

چرا باید از متد beforeRefreshingDatabase() استفاده کنم؟

؟

آیا می‌توانم چندین مدل را در beforeRefreshingDatabase() ایجاد کنم؟

؟

آیا این متد باعث افزایش زمان تست می‌شود؟