Mocha لـ JavaScript (Node.js): دليل شامل مع أمثلة
1. ما هو Mocha ولماذا تحتاجه
Mocha هو إطار اختبار قوي ومرن ومستخدم على نطاق واسع للغة JavaScript، يعمل في بيئة Node.js وفي المتصفح. تم إنشاؤه في عام 2011 بواسطة المطور TJ Holowaychuk، ومنذ ذلك الحين أصبح أحد المعايير الفعلية لاختبار تطبيقات JavaScript. يوفر Mocha للمطورين واجهة برمجة تطبيقات (API) نظيفة ومعيارية ومعبرة لكتابة كل من اختبارات الوحدات البسيطة وسيناريوهات الاختبار المعقدة والتكاملية وغير المتزامنة.
الهدف الرئيسي لـ Mocha هو جعل عملية الاختبار بسيطة وبديهية قدر الإمكان. على عكس بعض أطر العمل الأخرى، لا يفرض Mocha هيكلًا صارمًا للاختبارات ولا يتضمن مكتبة تأكيدات (assertions) مدمجة. بدلاً من ذلك، يوفر هيكلًا (framework) لتنظيم الاختبارات (describe/it/hooks) وتشغيلها بتقارير مختلفة (reporters)، تاركًا اختيار مكتبة التأكيدات للمطور. هذا يجعل Mocha مرنًا للغاية: يمكنك استخدامه مع الوحدة المدمجة assert، أو مكتبة Chai الشهيرة (التي توفر أنماط BDD/TDD)، أو Should.js، أو أي مكتبة أخرى.
لماذا تحتاج Mocha؟ في تطوير البرمجيات الحديث، الاختبار ليس ترفًا بل ضرورة. يتيح لك Mocha أتمتة التحقق من صحة عمل الكود، واكتشاف الأخطاء بعد التعديلات، وتوثيق سلوك الدوال والوحدات، وزيادة الموثوقية والاستقرار العام للتطبيق. بفضل دعمه للاختبار غير المتزامن (callback، promises، async/await) وإمكانية العمل مع مكتبات تأكيدات متنوعة، يعتبر Mocha مثاليًا لاختبار تطبيقات الخادم على Node.js، وواجهات API، وقواعد البيانات، وأي مكونات أخرى.
2. التثبيت
يتم تثبيت Mocha عبر مدير الحزم npm (Node Package Manager). يُنصح بتثبيته كاعتماد للتطوير (devDependency)، لأن الاختبارات غير مطلوبة في بيئة الإنتاج.
الأمر الدقيق للتثبيت:
npm install --save-dev mocha
بعد التثبيت، يمكنك تشغيل الاختبارات بإضافة سكريبت في ملف package.json:
{
"scripts": {
"test": "mocha"
}
}
الآن يمكن تشغيل الاختبارات باستخدام الأمر:
npm test
للتثبيت العام (غير موصى به، لكنه ممكن):
npm install -g mocha
3. بداية سريعة — مثال عملي بسيط
أنشئ ملفًا باسم test.js بالمحتوى التالي:
const assert = require('assert');
// الدالة التي سنختبرها
function add(a, b) {
return a + b;
}
// مجموعة الاختبار (suite)
describe('الدالة add', function() {
// اختبار محدد (spec)
it('يجب أن تعيد مجموع رقمين', function() {
// التأكيد (assertion)
assert.strictEqual(add(2, 3), 5);
});
it('يجب أن تعمل مع الأرقام السالبة', function() {
assert.strictEqual(add(-1, -1), -2);
});
});
قم بتشغيل الاختبار:
npx mocha test.js
يجب أن ترى تقريرًا أخضر يشير إلى نجاح الاختبارين.
4. الطرق/الدوال/الفئات الأساسية
يوفر Mocha دوالًا عامة لا تحتاج إلى استيراد (ما لم يتم تعطيلها بخيار --require). فيما يلي 8 طرق رئيسية مع التوقيع والوصف والأمثلة.
4.1 describe(name, fn)
التوقيع: describe(name: string, fn: function): void
الوظيفة: تنشئ مجموعة اختبار (suite) — مجموعة من الاختبارات المرتبطة. تُستخدم لتنظيم الاختبارات بشكل منطقي. يمكن أن تكون متداخلة.