tgoop.com/djangolearn_ir/837
Last Update:
#پست_جدید
💎 فیکسچر (fixure) در جنگو 💎
❓ فیکسچر چیه؟
فیکسچر یه جور دادهی از پیش تعریف شدهس که قبل از اجرای تستهامون به دیتابیس اضافه میشه. این دادهها میتونن هر چیزی باشن؛ از یه کاربر ساده گرفته تا یه محصول پیچیده توی فروشگاه آنلاینمون.
❓ چرا بهش نیاز داریم؟
1️⃣ تستهای دقیقتر: با داشتن دادههای مشخص، میتونیم تستهای دقیقتری بنویسیم و مطمئن بشیم که همه چیز طبق انتظار کار میکنه.
2️⃣ تستهای سریعتر: به جای اینکه هر بار قبل از اجرای تستها، دادههای مورد نیازمون رو به صورت دستی وارد دیتابیس کنیم، با استفاده از فیکسچر این کار رو یک بار انجام میدیم و در تستهای بعدی از همون دادهها استفاده میکنیم.
3️⃣ تکرارپذیری تستها: با استفاده از فیکسچر، میتونیم مطمئن باشیم که هر بار که تستهامون رو اجرا میکنیم، نتیجه یکسانی خواهیم داشت.
✅ ساختن یه فیکسچر
برای ساختن یه فیکسچر، یه فایل با پسوند json یا yaml ایجاد میکنیم و دادههای مورد نظرمون رو به صورت ساختیافته در اون تعریف میکنیم.
مثال با فرمت JSON:
[
{
"model": "myapp.Product",
"pk": 1,
"fields": {
"name": "گوشی موبایل سامسونگ",
"price": 5000000
}
},
{
"model": "myapp.Category",
"pk": 1,
"fields": {
"name": "گوشی موبایل"
}
}
]
در این مثال، ما دو رکورد برای مدلهای Product و Category تعریف کردیم.
✅ استفاده از فیکسچر در تستها
from django.test import TestCase
from .models import Product
class ProductTestCase(TestCase):
fixtures = ['products.json']
def test_product_detail(self):
product = Product.objects.get(pk=1)
self.assertEqual(product.name, 'گوشی موبایل سامسونگ')
در این مثال، ما به کلاس تستمون گفتیم که قبل از اجرای هر تستی، فیکسچر products.json رو لود کنه. بعد، در تست test_product_detail، محصول با id برابر با ۱ رو پیدا میکنیم و مطمئن میشیم که نام محصول درسته.
✅ دستورات لازم و ساخت و لود کردن فیکسچر
1️⃣ ساختن یه فیکسچر با دستور dumpdata
دستور dumpdata بهت اجازه میده که دادههای موجود در دیتابیس رو به صورت یک فایل JSON یا YAML خروجی بگیری. این فایل خروجی رو میتونی به عنوان فیکسچر استفاده کنی.
# برای خروجی گرفتن از همه مدلها به صورت JSON:Bash
python manage.py dumpdata app_name.ModelName --format json --indent 2 --output my_fixture.json
# برای خروجی گرفتن از یک مدل خاص به صورت YAML:
python manage.py dumpdata app_name.ModelName --format yaml--indent 2 --output my_fixture.yaml
2️⃣ استفاده از فیکسچر با دستور loaddata
دستور loaddata بهت اجازه میده که دادههای موجود در یک فایل فیکسچر رو به دیتابیس اضافه کنی.
# برای بارگذاری دادههای یک فایل JSON:
python manage.py loaddata my_fixture.json
# برای بارگذاری دادههای یک فایل YAML:
python manage.py loaddata products.yaml
✅ مثال عملی
فرض کن یه وبسایت فروشگاهی داریم و میخوایم یه تست بنویسیم که بررسی کنه آیا محصولی با نام خاص در دیتابیس وجود داره یا نه. اول از همه، با استفاده از دستور dumpdata از مدل Product یه فیکسچر میگیریم:
python manage.py dumpdata app_name.Product --format json --indent 2 --output product.json
سپس، در تستمون، این فیکسچر رو لود میکنیم و محصول مورد نظر رو جستجو میکنیم:
from django.test import TestCase
from .models import Product
class ProductTestCase(TestCase):
fixtures = ['products.json']
def test_product_exists(self):
product = Product.objects.get(name='گوشی موبایل سامسونگ')
self.assertIsNotNone(product)
⭕️ نکات کلیدی فیکسچر به زبان ساده
ساختار فیکسچر: فیکسچرت باید شبیه به همون چیزی باشه که توی دیتابیس داری. مثلاً اگه یه مدل محصول داری، فیکسچرت هم باید یه محصول رو تعریف کنه.
اسمگذاری فیکسچر: به فیکسچرت یه اسم بامعنا بده تا بفهمی توش چه دادههایی داری. مثلاً products.json یعنی توش اطلاعات محصولها هست.
مدیریت فیکسچر: وقتی تستهای زیادی مینویسی، باید یه جوری فیکسچرهات رو مرتب کنی تا گم نشی. میتونی از فولدرهای مختلف یا ابزارهای مخصوص استفاده کنی.
✅ جمعبندی
فیکسچر یه ابزار خیلی خفنه که بهت کمک میکنه تستهای بهتری بنویسی. با فیکسچر، میتونی دادههای از پیش تعریف شدهای رو به دیتابیس اضافه کنی و تست کنی که همه چیز درست کار میکنه. انگار داری یه محیط آزمایشی برای برنامهت میسازی.
⭕️ توجه: برای اطلاعات بیشتر و مثال های عملی تر، میتونید به مستندات رسمی جنگو مراجعه کنین.
#جنگو #تست #فیکسچر #برنامه_نویسی
BY جنگولرن

Share with your friend now:
tgoop.com/djangolearn_ir/837