0Pricing
Lua Academy · درس

كتل describe وit

نظّم مجموعة الاختبارات

كتل describe وit درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

بنية ملف المواصفات

ينظم busted الاختبارات باستخدام دالتين أساسيتين: describe وit. إذ تجمع كتلة describe الاختبارات ذات الصلة، وتمثل كل كتلة it حالة اختبار واحدة.

تأتي هذه البنية من تطوير البرمجيات القائم على السلوك، وتُقرأ كأنها نص إنجليزي عادي.

describe("Stack", function()
  it("starts empty", function()
    assert.are.equal(0, Stack.new():size())
  end)
end)

كتلة describe

تأخذ describe سلسلة نصية للاسم ودالةً. وينبغي أن يحدد الاسم الوحدة أو الميزة قيد الاختبار، مثل وحدة برمجية أو فئة.

ينتمي كل ما يوجد داخل الدالة إلى تلك المجموعة. ويظهر الاسم في مخرجات الاختبار لتنظيم النتائج.

describe("calculator", function()
  -- tests live here
end)

كتلة it

تصف كل كتلة it سلوكًا محددًا واحدًا. وينبغي أن تكمل السلسلة النصية الجملة التي بدأتها describe.

عند قراءتهما معًا، يشكل «calculator» و«يضيف عددين» مواصفة واضحة للغرض المقصود.

describe("calculator", function()
  it("adds two numbers", function()
    assert.are.equal(5, calc.add(2, 3))
  end)
end)

تداخل كتل describe

يمكنكم تداخل كتل describe للتعبير عن السياق. فقد تصف الكتلة الداخلية دالة محددة أو حالة خاصة.

يحافظ التداخل على الحالات ذات الصلة معًا، وينتج مخرجات مقروءة ذات مسافات بادئة.

describe("List", function()
  describe("push", function()
    it("adds an item", function()
      assert.are.equal(1, list:push("a"):size())
    end)
  end)
end)

إعداد before_each

تشغّل before_each دالةً قبل كل it موجودة في كتلتها. استخدموها لإنشاء بيانات اختبار جديدة حتى لا تتشارك الاختبارات الحالة.

يحافظ ذلك على عزل كل اختبار. فلا يمكن لتغيير في اختبار واحد أن يتسرب إلى الاختبار التالي.

describe("Stack", function()
  local s
  before_each(function()
    s = Stack.new()
  end)
  it("pushes", function()
    s:push(1)
    assert.are.equal(1, s:size())
  end)
end)

تنظيف after_each

تُشغّل after_each بعد كل اختبار. استخدموها لتنظيف الموارد مثل الملفات المؤقتة والاتصالات المفتوحة أو الحالة العامة.

يضمن الجمع بين الإعداد والتنظيف إعادة ضبط البيئة بين الاختبارات.

after_each(function()
  os.remove("temp.db")
end)

setup و teardown

يوفر busted أيضًا setup وteardown، وهما يُشغّلان مرة واحدة لكل كتلة describe بدلًا من مرة لكل اختبار.

استخدموهما للأعمال المكلفة التي تُنفذ مرة واحدة، مثل فتح اتصال مشترك، عندما يكون الإعداد لكل اختبار إهدارًا للموارد.

describe("db", function()
  setup(function()
    db = connect()
  end)
  teardown(function()
    db:close()
  end)
end)

الاختبارات المعلّقة

قد ترغبون أحيانًا في تسجيل اختبار لم تكتبوه بعد. استدعوا pending مع وصف، أو اكتبوا كتلة it من دون دالة.

يعرض busted هذه الاختبارات على أنها معلّقة بدلًا من ناجحة أو فاشلة، ليذكّركم بإكمالها.

it("handles unicode", function()
  pending("not implemented yet")
end)

التركيز والاستبعاد

أثناء تصحيح الأخطاء، يمكنكم التركيز على مجموعة فرعية من الاختبارات. ويتيح لكم وضع الوسم --tags في سطر الأوامر، أو استخدام مساعدات busted، تشغيل ما يهمكم فقط.

يمنع ذلك تشغيل المجموعة كاملة أثناء تكرار العمل على جزء واحد فاشل.

-- run only tests tagged 'fast'
-- busted --tags=fast

اصطلاحات التسمية

تجعل الأسماء الجيدة أسباب الفشل واضحة بذاتها. ابدؤوا describe بالموضوع، وابدؤوا it بفعل يصف السلوك.

تجنبوا الأسماء المبهمة مثل «يعمل» أو «test1». ينبغي أن يُقرأ الاختبار الفاشل كأنه تقرير خطأ يمكنكم التصرف بناءً عليه.

describe("parser", function()
  it("rejects malformed input", function()
    assert.has_error(function() parser.parse("{") end)
  end)
end)

جمع العناصر معًا

تجمع المواصفات الكاملة بين مجموعات describe وإعداد before_each وحالات it مركزة. ويمكن توسيع هذا الهيكل من اختبار واحد إلى مئات الاختبارات.

حافظوا على صغر الكتل، واجعلوا كل it مركزًا على سلوك واحد للحصول على أوضح مخرجات.

describe("Account", function()
  local acc
  before_each(function() acc = Account.new(100) end)
  it("withdraws funds", function()
    acc:withdraw(40)
    assert.are.equal(60, acc.balance)
  end)
end)

اختبار سريع

اختبروا مدى فهمكم لبنية كتل busted.

مراجعة

تجمع describe الاختبارات ذات الصلة، بينما تحدد it حالة واحدة، فتُقرأ البنية كأنها مواصفة. تداخلوا كتل describe للتعبير عن السياق.

استخدموا before_each وafter_each لعزل كل اختبار، واستخدموا setup وteardown للأعمال التي تُنفذ مرة واحدة لكل كتلة. وعلّموا العمل غير المكتمل باستخدام pending.

الأسئلة الشائعة

هل درس «كتل describe وit» مجاني؟

نعم — نص درس «كتل describe وit» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «كتل describe وit»؟

نظّم مجموعة الاختبارات تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «كتل describe وit»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا نختبر
  2. كتل describe وit
  3. التوكيدات
  4. Mocks وSpies
← العودة إلى Lua Academy