1. ما هي Chai ولماذا نحتاجها؟
Chai هي مكتبة تأكيدات (assertion library) قوية ومرنة في نظام JavaScript البيئي، مصممة لكتابة الاختبارات. توفر للمطور مجموعة واسعة من الأدوات للتحقق من السلوك المتوقع للكود. الهدف الأساسي لـ Chai هو جعل عملية كتابة الاختبارات بديهية وسهلة القراءة ومعبرة، بغض النظر عن أسلوب الاختبار الذي تفضله: TDD الكلاسيكي (التطوير القائم على الاختبار) أو BDD الأكثر حداثة (التطوير القائم على السلوك).
لماذا نحتاج Chai؟ في عملية تطوير البرمجيات، من الضروري التأكد من أن كل دالة أو وحدة أو مكون يعمل بالضبط كما هو مخطط له. بدلاً من التحقق يدويًا من كل قيمة باستخدام if...else ورمي الاستثناءات، تقدم Chai واجهة برمجة تطبيقات أنيقة. تتيح لك كتابة تأكيدات تبدو كجمل إنجليزية عادية: expect(foo).to.be.a('string') أو assert.equal(3, 3). هذا يبسط بشكل كبير قراءة الاختبارات وصيانتها وتصحيح أخطائها. Chai ليست مشغل اختبارات (مثل Mocha أو Jest)، بل تعمل معهم لتوفير طبقة للتحقق من الشروط.
Chai تحظى بشعبية خاصة في بيئة Node.js، ولكن يمكن استخدامها أيضًا في المتصفح. تدعم ثلاث واجهات رئيسية: expect (نمط BDD، سلاسل الاستدعاءات)، should (نمط BDD، توسيع النماذج الأولية)، و assert (نمط TDD، الكلاسيكي). بفضل وحداتها وعددها الهائل من الإضافات (مثل العمل مع JSON و DOM و Promise)، تعتبر Chai حلاً شاملاً لاختبار أي كود JavaScript تقريبًا.
2. التثبيت
يتم تثبيت Chai في مشروع Node.js عبر مدير الحزم npm. يُنصح بتثبيتها كاعتماد للتطوير (devDependency)، حيث أن المكتبة غير مطلوبة في بناء الإنتاج.
npm install --save-dev chai
إذا كنت تستخدم yarn:
yarn add --dev chai
بعد التثبيت، يمكنك استيراد Chai في ملف الاختبار الخاص بك. يتم ذلك عادةً بإحدى طريقتين:
// استيراد الوحدة بأكملها (موصى به لـ Node.js)
const chai = require('chai');
// أو، إذا كنت تستخدم وحدات ES (type: "module" في package.json)
import chai from 'chai';
3. البداية السريعة
لنكتب اختبارًا بسيطًا باستخدام Chai ومشغل الاختبارات الشهير Mocha. أولاً، قم بتثبيت Mocha: npm install --save-dev mocha.
أنشئ ملفًا باسم test.js:
const chai = require('chai');
const expect = chai.expect; // استخدام نمط BDD
// الدالة التي سنختبرها
function add(a, b) {
return a + b;
}
// وصف مجموعة الاختبار (suite)
describe('دالة add', function() {
// اختبار محدد (spec)
it('يجب أن تجمع رقمين بشكل صحيح', function() {
// التأكيد (assertion)
expect(add(2, 3)).to.equal(5);
});
it('يجب أن تعيد رقمًا', function() {
expect(add(2, 3)).to.be.a('number');
});
});
قم بتشغيل الاختبار بالأمر npx mocha test.js. سترى تقريرًا أخضر يشير إلى نجاح الاختبارات. يوضح هذا المثال البنية الأساسية: describe لتجميع الاختبارات، it لوصف اختبار معين، و expect للتحقق من النتيجة.
4. أهم الطرق والدوال
توفر Chai ثلاث واجهات برمجة تطبيقات رئيسية: expect و should و assert. سنستعرض الطرق الأكثر استخدامًا من خلال مثال expect، لأنه الأكثر شيوعًا ومرونة.