لماذا نختبر
اكتشف الأخطاء قبل المستخدمين
لماذا نختبر درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
لماذا نختبر أصلًا
الاختبارات الآلية هي تعليمات برمجية تتحقق من تعليماتكم البرمجية. فبدلًا من تشغيل البرنامج يدويًا وتفحّص مخرجاته، تكتبون تأكيدات صغيرة يتحقق منها مشغّل الاختبارات نيابةً عنكم.
أما في Lua، فأشهر إطار عمل هو busted. إذ يوفر صياغة واضحة لوصف السلوك والإبلاغ عن نتائج النجاح أو الفشل.
تكلفة عدم وجود اختبارات
من دون اختبارات، يصبح كل تغيير مجازفة. فقد تصلحون خطأً وتسببون بصمت خطأً آخر. ومع نمو قاعدة الشيفرة، يصبح التحقق اليدوي الشامل أمرًا مستحيلًا.
تعمل الاختبارات كشبكة أمان. فعند إعادة هيكلة الشيفرة، تخبركم مجموعة الاختبارات الناجحة بأن السلوك ما زال محفوظًا.
أول ملف اختبار
يوجد ملف اختبار busted عادةً داخل مجلد spec/، وينتهي اسمه بـ _spec.lua. وفي داخله تصفون ما تختبرونه.
إليكم أصغر مثال مفيد؛ فهو يتحقق من عمل العمليات الحسابية البسيطة.
describe("math", function()
it("adds numbers", function()
assert.are.equal(4, 2 + 2)
end)
end)تشغيل busted
تثبتون busted باستخدام LuaRocks عبر الأمر: luarocks install busted. ثم تشغّلون الأمر busted في المجلد الجذر لمشروعكم.
يكتشف busted الملفات التي تنتهي بـ _spec.lua، ويشغّل كل كتلة it، ويطبع نقطة لكل نجاح والحرف F لكل فشل.
اختبار وحدتكم البرمجية
تستورد الاختبارات الفعلية الوحدة البرمجية قيد الاختبار باستخدام require. ثم تستدعون دوالها وتتحققون من النتيجة باستخدام التأكيدات.
لنفترض أن لديكم وحدة calculator.lua تعيد جدولًا من الدوال.
local calc = require("calculator")
describe("calculator", function()
it("multiplies", function()
assert.are.equal(6, calc.mul(2, 3))
end)
end)الاختبارات بوصفها توثيقًا
تؤدي الاختبارات المكتوبة جيدًا دور التوثيق الحي أيضًا. إذ يستطيع المطور الجديد قراءة ملف المواصفات وفهم السلوك المقصود للدالة بدقة.
ولأن الأوصاف سلاسل نصية عادية، فهي تُقرأ تقريبًا كجمل: «calculator» يضرب.
describe("string utils", function()
it("trims whitespace", function()
assert.are.equal("hi", utils.trim(" hi "))
end)
end)دورات تغذية راجعة سريعة
تكمن القوة الحقيقية للاختبارات في سرعتها. فتشغيل المجموعة كاملة يستغرق ثواني، وهو أسرع بكثير من النقر يدويًا داخل التطبيق.
يمكنكم حتى تشغيل busted في وضع المراقبة أو استهداف ملف واحد للحفاظ على سرعة التغذية الراجعة أثناء التطوير.
-- run only one file
-- busted spec/calculator_spec.luaاكتشاف التراجعات
التراجع هو خطأ يظهر من جديد في شيفرة كانت تعمل سابقًا. وعندما تكتشفون خطأً، فمن أفضل الممارسات كتابة اختبار يعيد إنتاجه أولًا.
بعد فشل الاختبار، أصلحوا الشيفرة حتى ينجح. وسيحمي هذا الاختبار الشيفرة لاحقًا من عودة الخطأ.
it("handles empty input", function()
assert.are.equal(0, calc.sum({}))
end)ما الذي يجعل الاختبار جيدًا
تتصف الاختبارات الجيدة بالسرعة والعزل والحتمية. ولا ينبغي أن تعتمد على الشبكة أو الوقت أو القيم العشوائية، إلا إذا كانت هذه العوامل تحت السيطرة.
ينبغي أن يتحقق كل اختبار من سلوك واضح واحد. وإذا فشل اختبار، فيجب أن يخبركم اسمه بما تعطل دون الحاجة إلى قراءة محتواه.
هرم الاختبارات
يقترح هرم الاختبارات وجود عدد كبير من اختبارات الوحدة الصغيرة، وعدد أقل من اختبارات التكامل، وعدد قليل جدًا من الاختبارات الشاملة من البداية إلى النهاية. واختبارات الوحدة رخيصة وسريعة، لذا يُفضّل استخدامها.
يُستخدم busted أساسًا لاختبار الوحدات، مع إمكانية استخدامه لاختبارات التكامل أيضًا.
الثقة اللازمة لإجراء التغييرات
أعمق فائدة للاختبار هي الثقة. فمع وجود مجموعة اختبارات موثوقة، يمكنكم إعادة هيكلة الشيفرة بجرأة، وترقية التبعيات، وإطلاق الإصدارات بسرعة أكبر.
تعلّمكم هذه الدورة استخدام busted من الأساسيات: البنية، والتأكيدات، والبدائل الاختبارية مثل mocks وspies.
describe("feature", function()
it("still works after refactor", function()
assert.is_true(feature.enabled())
end)
end)اختبار سريع
اختبروا مدى فهمكم لسبب كتابة الاختبارات.
مراجعة
الاختبارات شيفرة تتحقق من شيفرة أخرى. ويُعد busted إطار Lua الرائد، إذ يكتشف ملفات _spec.lua ويُبلغ عن النجاح أو الفشل.
تتصف الاختبارات الجيدة بالسرعة والعزل والحتمية. فهي تكتشف التراجعات، وتؤدي دور التوثيق، وتمنحكم الثقة لتغيير الشيفرة بحرية.
الأسئلة الشائعة
هل درس «لماذا نختبر» مجاني؟
نعم — نص درس «لماذا نختبر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «لماذا نختبر»؟
اكتشف الأخطاء قبل المستخدمين تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «لماذا نختبر»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا نختبر
- كتل describe وit
- التوكيدات
- Mocks وSpies