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

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

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

ابدأ الدورة

ما هو Vitest ولماذا هو مطلوب؟

Vitest هي مكتبة حديثة لاختبار الوحدات (unit-testing)، موجهة للنظام البيئي Vite و TypeScript. تم إنشاؤها كبديل سريع لـ Jest، ولكن مع دعم كامل لـ TypeScript «مباشرة من الصندوق» دون أي تكوين إضافي. يستخدم Vitest محلل TypeScript الأصلي ونظام الوحدات الخاص بـ Vite، مما يجعل الاختبارات فورية حتى في المشاريع الكبيرة.

التثبيت

قم بتثبيت Vitest في مشروع TypeScript الخاص بك عبر npm:

npm install -D vitest

بالإضافة إلى ذلك، إذا كنت تستخدم React أو Vue، فقم بتثبيت الأدوات المساعدة المرتبطة:

npm install -D @testing-library/react @testing-library/jest-dom

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

  • السرعة: يتم تشغيل الاختبارات بشكل متوازٍ باستخدام العمال (workers)، مما يسرع التنفيذ حتى 10 مرات مقارنة بـ Jest.
  • التوافق مع TypeScript: لا يتطلب ts-jest أو babel — يعمل مباشرة مع ملفات .ts و .tsx.
  • الكائنات الوهمية (Mocks) والمتطفلون (Spies) المدمجون: دوال vi.mock و vi.spyOn و vi.fn لعزل الكود.
  • اختبار اللقطات (Snapshot-testing): إمكانية حفظ ومقارنة لقطات للمكونات أو البيانات.
  • التغطية (Coverage): دعم مدمج لـ c8 أو istanbul لتقارير تغطية الكود.

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

لنكتب اختبارًا لدالة جمع بسيطة:

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

// math.test.tsimport { describe, it, expect } from 'vitest';import { add } from './math';

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

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

it('should return zero for zero arguments', () => { expect(add(0, 0)).toBe(0); });});

تشغيل الاختبارات:

npx vitest

سيبحث Vitest تلقائيًا عن جميع الملفات ذات الامتداد .test.ts أو .spec.ts.

متى تستخدم

Vitest مثالي لـ:

  • المشاريع الجديدة على Vite: تكامل فوري دون أي تكوين.
  • الترحيل من Jest: يحتوي Vitest على واجهة برمجة تطبيقات (API) مشابهة، مما يبسط عملية الانتقال.
  • اختبار مكتبات TypeScript: دعم كامل للمُزينات (decorators) والأنواع العامة (generics) والأنواع المعقدة.
  • خطوط أنابيب CI/CD: سرعة التنفيذ العالية توفر الوقت في عمليات البناء التلقائية.

تجنب استخدام Vitest إذا كان مشروعك يتطلب إصدارات قديمة من Node.js (أقل من 14) أو إذا كنت تستخدم إضافات خاصة بـ Jest غير متوافقة مع Vite.

الخلاصة

Vitest هي أداة اختبار حديثة وسريعة وصديقة لـ TypeScript. إنها تزيل العديد من عيوب Jest، مثل بطء التشغيل والإعداد المعقد لـ TypeScript. إذا كنت تعمل مع TypeScript وتقدر سرعة التطوير، فسيكون Vitest خيارًا ممتازًا.

توصيات