مرجع سريع

ورقة غش إطار الاختبار Jest

دليل مرجعي شامل لإطار Jest في جافا سكريبت: خيارات CLI، دوال المطابقة Matchers، الدوال الوهمية Mocks و Spies، اختبارات اللقطات Snapshots، الأكواد غير المتزامنة وخطافات الإعداد.

· تاريخ النشر

Jest هو إطار اختبار ممتع لجافا سكريبت يركز على البساطة، الإعداد دون تهيئة مسبقة (zero-config)، واختبارات اللقطات الفورية.

تنفيذ الاختبارات وخيارات سطر الأوامر (CLI Flags)

jest                           # تشغيل جميع الاختبارات
jest --watch                   # تشغيل الاختبارات في وضع المراقبة التفاعلي
jest --coverage                # إنشاء تقرير تغطية الكود
jest path/to/test.js           # تشغيل ملف اختبار محدد
jest -t "test name pattern"    # تصفية الاختبارات حسب نص الوصف
jest --runInBand               # تشغيل الاختبارات تسلسليا داخل عملية واحدة

دوال المطابقة الشائعة (Common Matchers)

// التحقق من الحقيقة والمساواة
expect(val).toBe(42);                  // مساواة صارمة (Object.is)
expect(val).toEqual({ a: 1 });         // مساواة هيكلية عميقة للكائنات والمصفوفات
expect(val).toStrictEqual({ a: 1 });   // فحص عميق مع التحقق من النماذج الأولية للأنواع
expect(val).toBeNull();
expect(val).toBeDefined();
expect(val).toBeTruthy();
expect(val).toBeFalsy();

// الأرقام والمقارنات العددية
expect(val).toBeGreaterThan(3);
expect(val).toBeGreaterThanOrEqual(3.5);
expect(val).toBeCloseTo(0.3, 5);       // مقارنة الحسابات العشرية العائمة بدقة محددة

// النصوص والمصفوفات
expect(str).toMatch(/regex/);
expect(arr).toContain('item');
expect(arr).toHaveLength(3);

// معالجة الاستثناءات والأخطاء
expect(() => compileCode()).toThrow();
expect(() => compileCode()).toThrow(ConfigError);

اختبار الأكواد غير المتزامنة (Asynchronous Code)

test('resolves with data', async () => {
  const data = await fetchData();
  expect(data).toHaveProperty('status', 200);
});

test('handles promise rejection', async () => {
  await expect(fetchData('invalid')).rejects.toThrow('Not Found');
});

الدوال الوهمية والمراقبة (jest.fn() و Spies)

const mockFn = jest.fn().mockReturnValue('mocked result');
mockFn('arg1');

expect(mockFn).toHaveBeenCalledTimes(1);
expect(mockFn).toHaveBeenCalledWith('arg1');

// Mocking module methods
const spy = jest.spyOn(api, 'getUser').mockResolvedValue({ id: 1, name: 'Alice' });
const user = await api.getUser(1);
expect(spy).toHaveBeenCalled();
spy.mockRestore(); // استعادة التنفيذ الأصلي للدالة

اختبار اللقطات (Snapshot Testing)

test('renders correctly', () => {
  const tree = renderer.create(<Button label="Submit" />).toJSON();
  expect(tree).toMatchSnapshot();
});

خطافات الإعداد والتنظيف (Setup and Teardown)

beforeAll(() => database.connect());
afterAll(() => database.disconnect());
beforeEach(() => database.clear());
afterEach(() => jest.clearAllMocks());

مراجع ذات صلة

موضوعات ذات صلة