دليل اختبار Jest لمطوري JavaScript
يساعدك الاختبار في اكتشاف الأخطاء (bugs) مبكرًا، كما أنه يحسن جودة الكود، ويسمح لك بإطلاق الميزات الجديدة دون كسر الكود القديم.
Jest هي أداة اختبار شائعة لـ JavaScript و Node.js. قامت شركة Meta بتطويرها، وهي تعمل مع TypeScript و React و Next.js و Express.js.
لماذا تستخدم Jest؟
- تتطلب إعدادًا بسيطًا.
- تقوم بتشغيل الاختبارات بالتوازي لزيادة السرعة.
- تتضمن أدوات المحاكاة (mocking tools).
- تعرض تقارير تغطية الكود (code coverage).
- توفر رسائل خطأ واضحة.
كيفية إعداد Jest:
- إنشاء مشروع Node.js:
npm init -y - تثبيت Jest:
npm install --save-dev jest - تحديث سكربتات package.json لتشمل
"test": "jest" - تشغيل الاختبارات باستخدام:
npm test
كتابة اختبار بسيط:
إنشاء sum.js:
function sum(a, b) {
return a + b;
}
module.exports = sum;
إنشاء sum.test.js:
const sum = require("./sum");
test("adds two numbers", () => {
expect(sum(2, 3)).toBe(5);
});
أدوات Jest الأساسية:
- التأكيدات (Assertions): استخدم
expect()وtoBe()للتحقق من القيم. - الكائنات (Objects): استخدم
toEqual()لمقارنة الكائنات أو المصفوفات. - التنظيم: استخدم
describe()لتجميع الاختبارات ذات الصلة. - العمليات غير المتزامنة (Async): تتعامل Jest مع الدوال غير المتزامنة بشكل طبيعي باستخدام
await. - المحاكاة (Mocks): استخدم
jest.fn()لمحاكاة الدوال. هذا يحافظ على سرعة الاختبارات من خلال تجنب استدعاءات API الحقيقية أو الاتصال بقواعد البيانات. - الخطافات (Hooks): استخدم
beforeEach()وafterEach()لإعداد بيانات الاختبار أو تنظيفها.
قياس نجاحك:
قم بتشغيل npx jest --coverage لعرض تقرير التغطية الخاص بك. يوضح هذا التقرير الأجزاء التي تفتقر إلى الاختبارات في الكود الخاص بك.
اختبار واجهات برمجة التطبيقات (APIs):
استخدم Supertest لاختبار نقاط نهاية الـ API. يمكنك التحقق من رموز الحالة (status codes) دون الحاجة لتشغيل خادم حقيقي.
اختبار اللقطات (Snapshot Testing):
استخدم matchSnapshot() في React. يساعدك هذا في اكتشاف التغييرات غير المتوقعة في واجهة المستخدم من خلال مقارنة عمليات الرندرة (renders) الحالية بالنسخ المحفوظة.
أفضل الممارسات:
- اكتب اختبارات تصف النتائج.
- تجنب اختبار هيكل الكود الداخلي.
- ابتعد عن استخدام قواعد البيانات الحقيقية في اختبارات الوحدة (unit tests).
- ركز على التغطية ذات المعنى.
إتقان Jest يساعدك على بناء برمجيات موثوقة.