Jest لـ TypeScript: دليل شامل للاختبار

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة
```html

ما هو Jest ولماذا هو ضروري لـ TypeScript؟

Jest هو إطار عمل قوي وشائع لاختبار JavaScript و TypeScript، تم تطويره بواسطة شركة Meta (Facebook). يوفر كل ما هو ضروري لكتابة اختبارات الوحدة (unit-tests)، واختبارات التكامل (integration tests)، واختبارات اللقطات (snapshot tests) "مباشرة من الصندوق": مكتبة التأكيدات (assertion library)، والمحاكاة (mocks)، والمتتبعين (spies)، والمؤقتات (timers)، وتغطية الكود (code coverage). بالنسبة لـ TypeScript، يعتبر Jest ذا قيمة خاصة لأنه يسمح بالتحقق من الأنواع (types) أثناء تنفيذ الاختبارات، مما يزيد من موثوقية الكود. يساعد استخدام Jest مع TypeScript المطورين في العثور على الأخطاء بشكل أسرع، وإعادة هيكلة الكود بثقة، والحفاظ على جودة عالية للمشروع.

التثبيت والإعداد

للبدء، قم بتثبيت Jest والأنواع اللازمة عبر npm أو yarn:

npm install --save-dev jest @types/jest ts-jest typescript

ثم قم بتهيئة إعدادات Jest:

npx ts-jest config:init

سيؤدي هذا إلى إنشاء ملف jest.config.js مع إعدادات TypeScript. تأكد من تعيين "module": "commonjs" في ملف tsconfig.json أو استخدم ts-node لـ ESM.

الوظائف الأساسية

  • describe و it/test — لتجميع وكتابة الاختبارات.
  • expect — دالة التأكيد (assertion function) مع العديد من المطابقات (matchers) مثل toBe, toEqual, toContain, toThrow وغيرها.
  • beforeEach / afterEach — خطافات (hooks) لإعداد وتنظيف البيئة.
  • jest.mock — لمحاكاة الوحدات (modules) تلقائياً.
  • jest.spyOn — لتتبع استدعاءات الدوال.
  • اختبار اللقطات (Snapshot testing) — لمقارنة مخرجات المكونات.
  • تغطية الكود (Code coverage) — أداة مدمجة --coverage.

مثال كود بلغة TypeScript

// math.tsexport const add = (a: number, b: number): number => a + b;export const divide = (a: number, b: number): number => {  if (b === 0) throw new Error('Division by zero');  return a / b;};

// math.test.tsimport { add, divide } from './math';

describe('Math functions', () => { test('adds two numbers correctly', () => { expect(add(2, 3)).toBe(5); expect(add(-1, 1)).toBe(0); });

test('throws error when dividing by zero', () => { expect(() => divide(10, 0)).toThrow('Division by zero'); });

test('divides correctly', () => { expect(divide(10, 2)).toBe(5); expect(divide(9, 3)).toBeCloseTo(3); });});

متى تستخدم Jest مع TypeScript؟

  • أي مشاريع TypeScript — من المكتبات الصغيرة إلى التطبيقات الكبيرة.
  • التطوير باستخدام TDD — Jest ممتاز لكتابة الاختبارات قبل التنفيذ.
  • إعادة الهيكلة (Refactoring) — للتأكد من أن التغييرات لم تكسر المنطق الموجود.
  • خطوط أنابيب CI/CD — لتشغيل الاختبارات بسرعة والتحقق من التغطية.
  • اختبار مكونات React — بالاشتراك مع @testing-library/react.

Jest هو المعيار الفعلي (de facto standard) لاختبار TypeScript، بفضل سهولة الإعداد، وواجهة برمجة التطبيقات (API) الغنية، والتكامل الممتاز مع الأدوات الحديثة.

```

توصيات