اختبار TypeScript باستخدام Jest

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

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

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

ما هو الاختبار في TypeScript؟

الاختبار في TypeScript هو عملية التحقق من صحة عمل الكود المكتوب بلغة TypeScript باستخدام مكتبات وأطر عمل متخصصة. TypeScript هي طبقة علوية فوق JavaScript تضيف الكتابة الثابتة (Static Typing)، مما يجعل الاختبار فعالاً بشكل خاص: تساعد الأنواع في اكتشاف الأخطاء في مرحلة الترجمة (Compilation)، بينما تختبر الاختبارات منطق الأعمال (Business Logic) وسلوك التطبيق. المكتبة الأساسية لاختبار TypeScript هي Jest، والتي تدعم TypeScript بشكل مباشر أو من خلال إعدادات إضافية.

لماذا نحتاج إلى الاختبار في TypeScript؟

الاختبار ضروري لضمان موثوقية الكود، ومنع الانتكاسات (Regressions)، وتسريع التطوير، وتوثيق سلوك الدوال. في TypeScript، تكون الاختبارات مفيدة بشكل خاص لأنها لا تختبر المنطق فحسب، بل تتحقق أيضًا من تطابق الأنواع، مما يقلل من عدد أخطاء وقت التشغيل (Runtime Errors). بدون اختبارات، يصعب الحفاظ على المشاريع الكبيرة حيث يمكن للتغييرات في وحدة واحدة أن تكسر أجزاء أخرى من النظام.

كيفية تثبيت Jest لـ TypeScript؟

لتثبيت Jest مع دعم TypeScript، قم بتنفيذ الأوامر التالية في الطرفية (Terminal):

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

ثم قم بإنشاء ملف الإعدادات jest.config.js:

module.exports = {  preset: 'ts-jest',  testEnvironment: 'node',};

أو استخدم أمر التهيئة: npx ts-jest config:init. بعد ذلك، يمكنك تشغيل الاختبارات باستخدام الأمر npx jest.

الوظائف الأساسية لـ Jest في TypeScript

  • describe و it — لتجميع ووصف حالات الاختبار.
  • expect — التأكيدات (Assertions) للتحقق من القيم.
  • matchers — دوال مدمجة للمقارنة (toBe, toEqual, toBeTruthy وغيرها).
  • mock-функции — محاكاة التبعيات والوحدات النمطية.
  • async/await — دعم الكود غير المتزامن (Asynchronous Code).
  • coverage — أداة مدمجة لقياس تغطية الكود بالاختبارات.

مثال على كود TypeScript

لننظر إلى دالة بسيطة واختبارها:

// math.tsexport function add(a: number, b: number): number {  return a + b;}

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

describe('add function', () => { it('should add two numbers correctly', () => { expect(add(2, 3)).toBe(5); });

it('should handle negative numbers', () => { expect(add(-1, 1)).toBe(0); });

it('should return NaN for invalid inputs', () => { // TypeScript لن يسمح بتمرير نص، ولكن إذا تم تجاوز الأنواع: expect(add(NaN, 5)).toBeNaN(); });});

قم بتشغيل الاختبار باستخدام الأمر npx jest. سترى تقريرًا عن اجتياز الاختبارات والتغطية.

متى تستخدم Jest لـ TypeScript؟

يوصى باستخدام Jest في الحالات التالية:

  • تطبيقات Node.js وخوادم API المكتوبة بـ TypeScript.
  • مشاريع الواجهة الأمامية (Frontend) مع React أو Angular أو Vue (يعمل Jest مع DOM عبر jsdom).
  • المكتبات والأدوات المساعدة حيث تكون أمان الأنواع (Type Safety) مهمة.
  • المشاريع التي تستخدم CI/CD والتي تتطلب تشغيلًا تلقائيًا للاختبارات.
  • الهندسة المعمارية القائمة على الخدمات المصغرة (Microservices) لاختبار الوحدات بشكل معزول.

تجنب استخدام Jest إذا كنت بحاجة فقط لاختبار الأنواع (استخدم tsc --noEmit) أو إذا كان المشروع يستخدم إطار عمل اختبار آخر (مثل Mocha أو Vitest).

```

توصيات