Vitest + RTL اختبار Vitest + RTL

آخر تحديث: 2026-11-03

Vitest + RTL اختبار Vitest + RTL

Vitest عدّاء اختبار سريع جدًا يشارك إعداده مع Vite، وReact Testing Library تتيح لك اختبار المكوّنات «كما يفعل المستخدم»: render يركّب، وgetByRole يستعلم، وuserEvent يُحاكي التفاعل، وتستهدف التأكيدات السلوك لا تفاصيل التنفيذ. هذا التحوّل هو ما يجعل الاختبارات صامدة أمام إعادة البناء. وبما أن العدّاء يعيد استخدام خط أنابيب Vite، فنفس رسم الوحدات الذي يشغّل خادم التطوير يشغّل حزمة الاختبارات.

المجموعةالبيانات والهندسة
النوعأدوات
منذ الإصدارVitest 2.x + RTL 16

ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.

📝 الصيغة

import { describe, it, expect } from 'vitest'
import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import Counter from './Counter'

describe('Counter', () => {
  it('increments the number after a click', async () => {
    render(<Counter />)
    expect(screen.getByRole('status')).toHaveTextContent('0')
    await userEvent.click(screen.getByRole('button', { name: '+1' }))
    expect(screen.getByRole('status')).toHaveTextContent('1')
  })
})

القيمة المرجعة:تنظّم describe وit الحالات؛ وrender تركّب المكوّن وتُعيد مقابض الاستعلام؛ وscreen.getByRole وأخواتها تستعلم العناصر دلاليًا؛ وexpect تُؤكّد النتيجة.

▶ مثال

المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.

الناتج:

يتغيّر Counter الأعلى مع الأزرار، بينما يضيء لوح الحالات أدناه إطارًا تلو الآخر — سريان RTL لاستعلام getByRole مع تأكيد expect ناجح (عرض توضيحي محاكى).

💡 النقاط الأساسية

💡 نصيحة فضّل الاستعلامات الدلالية مثل getByRole وByLabelText: يكون الاختبار فحصًا للوصولية مجانًا وأقرب للمستخدم من getByTestId.
ℹ️ ملاحظة يشاطر Vitest الإعداد وخط الأنابيب مع Vite وأسرع بكثير من Jest؛ والانتقال من Jest غالبًا يقتصر على تغيير مصدر الاستيراد.
⚠️ تحذير لا تُؤكّد على الحالة الداخلية أو تفاصيل التنفيذ، فإعادة البناء تحمر الحزمة كلها؛ اختبر «ماذا يرى المستخدم وماذا يحدث عند نقره».
المزيد من الحالات قريباً.

📚 دروس ذات صلة

❓ الأسئلة الشائعة

س بم يختلف تفكير RTL عن Enzyme؟
ج يتسرّب Enzyme غالبًا إلى الحالة والـ props الداخلية — تفاصيل تنفيذ — بينما RTL تستعلم الناتج المرسوم كما يفعل المستخدم. فالاختبارات أصمد للإعادة البناء وهي الأسلوب الموصى به رسميًا.
س كيف أختبر عملية غير متزامنة (رسم بعد طلب)؟
ج استخدم عائلة findByRole التي تستطلب بانتظار مدمج، واعترض الشبكة بـ msw فتعود استجابة ببيانات مزيفة متحكَّم بها.
س كيف يختبر Vitest Hook مخصّصًا؟
ج استخدم renderHook من @testing-library/react، واقرأ أحدث قيمة عائدة من result.current وأكّد بعد أن يُطلق rerender تحديثًا.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%