0Pricing
React Academy · درس

اختبار Storybook والانحدار البصري

شغّل دوال play لاختبارات التفاعل وادمج Chromatic لمقارنة الاختلافات البصرية.

اختبار Storybook والانحدار البصري درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

لماذا نختبر باستخدام Storybook؟

يأتي Storybook 7 والإصدارات الأحدث مزوّداً بـ @storybook/test لاختبار التفاعلات (دوال play)، كما يتكامل مع Chromatic لإجراء اختبارات الانحدار المرئي تلقائياً، وكل ذلك من دون مغادرة مستكشف المكوّنات.

دوال Play

تُشغَّل دالة play بعد عرض القصة، وتحاكي تفاعلات المستخدم باستخدام أدوات @storybook/test. تظهر النتائج في لوحة Interactions.

import { within, userEvent, expect } from '@storybook/test';

export const FilledForm: Story = {
  play: async ({ canvasElement }) => {
    const canvas = within(canvasElement);
    await userEvent.type(canvas.getByLabelText('Email'), 'test@example.com');
    await userEvent.click(canvas.getByRole('button', { name: /submit/i }));
    await expect(canvas.getByText('Success!')).toBeInTheDocument();
  },
};

التوكيدات في دوال Play

استخدموا expect من @storybook/test (وهو مُعاد تصديره من Vitest/Jest) داخل دوال play للتوكيد على حالة المكوّن بعد التفاعلات.

play: async ({ canvasElement }) => {
  const canvas = within(canvasElement);
  const button = canvas.getByRole('button', { name: /add/i });
  await userEvent.click(button);
  await expect(canvas.getByText('1 item')).toBeInTheDocument();
  await userEvent.click(button);
  await expect(canvas.getByText('2 items')).toBeInTheDocument();
},

تشغيل اختبارات القصص باستخدام Storybook Test Runner

تحوّل الحزمة @storybook/test-runner كل قصة تحتوي على دالة play إلى اختبار Jest. شغّلوها في CI باستخدام أمر واحد.

# Install
npm install @storybook/test-runner --save-dev

# package.json
"test-storybook": "test-storybook"

# Run (requires Storybook to be running)
npm run test-storybook

ما اختبار الانحدار المرئي؟

ينشئ اختبار الانحدار المرئي لقطات شاشة للمكوّنات، ويرصد الاختلافات على مستوى البكسل بين عمليات الإيداع. وتُعد Chromatic وPlaywright وPercy أدوات شائعة لهذا الغرض.

إعداد Chromatic

Chromatic هي خدمة Storybook السحابية الرسمية للاختبار المرئي. ادفعوا القصص، وستقارن Chromatic لقطات الشاشة بخط الأساس السابق.

# Install
npm install chromatic --save-dev

# Run (get project token from chromatic.com)
npx chromatic --project-token=<YOUR_TOKEN>

# CI: add to GitHub Actions
- name: Chromatic
  run: npx chromatic --project-token=${{ secrets.CHROMATIC_TOKEN }}

مراجعة التغييرات المرئية

تعرض Chromatic واجهة فروق يمكن للمراجعين من خلالها قبول التغييرات المرئية أو رفضها. تصبح التغييرات المقبولة خط الأساس الجديد، بينما تمنع التغييرات المرفوضة طلب السحب.

اختبار اللقطات باستخدام Storybook

يمكن أيضاً لمشغّل الاختبارات إجراء فحوصات إمكانية الوصول تلقائياً عبر @storybook/addon-a11y على كل قصة في CI.

// .storybook/test-runner.ts
import { checkA11y } from 'axe-playwright';

export default {
  async postVisit(page) {
    await checkA11y(page, '#storybook-root', {
      detailedReport: true,
    });
  },
};

تركيب Storybook

ركّبوا عدة مشاريع Storybook من مستودعات مختلفة في واجهة مستخدم واحدة، وهو أمر مفيد لأنظمة التصميم المشتركة بين المشاريع.

// .storybook/main.ts
refs: {
  'design-system': {
    title: 'Design System',
    url: 'https://design-system.example.com',
  },
},

اختبار القصص المتجاوبة

استخدموا إضافة viewport لاختبار القصص بأحجام الهواتف والأجهزة اللوحية وأجهزة سطح المكتب. عيّنوا viewport في معاملات القصة لتثبيت القصة على حجم محدد.

export const Mobile: Story = {
  parameters: {
    viewport: { defaultViewport: 'mobile1' },
  },
  args: { label: 'Mobile Button' },
};

الوقاية من الاختبارات غير المستقرة

تجنّبوا الاختبارات المرئية غير المستقرة باستخدام delay في دوال play للانتظار حتى انتهاء الرسوم المتحركة، أو عطّلوا الرسوم المتحركة عالمياً في معاينة Storybook.

// .storybook/preview.ts
export const parameters = {
  chromatic: { disableSnapshot: false },
  // Disable CSS animations for consistent screenshots
};

// Global CSS for tests:
// * { animation: none !important; transition: none !important; }

تقارير التغطية

شغّلوا test-storybook --coverage لإنشاء تقرير تغطية يوضّح أسطر المكوّنات التي تغطيها اختبارات دوال play.

تحقّق سريع

أين تُشغّل دالة play في Storybook تفاعلاتها؟

مراجعة

تختبر دوال play تفاعلات المكوّنات داخل Storybook باستخدام @storybook/test. ويحوّل مشغّل الاختبارات دوال play إلى اختبارات Jest لتشغيلها في CI. كما تضيف Chromatic لقطات انحدار مرئي ترصد التغييرات على مستوى بكسلات واجهة المستخدم لمراجعتها قبل الدمج.

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

هل درس «اختبار Storybook والانحدار البصري» مجاني؟

نعم — نص درس «اختبار Storybook والانحدار البصري» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «اختبار Storybook والانحدار البصري»؟

شغّل دوال play لاختبارات التفاعل وادمج Chromatic لمقارنة الاختلافات البصرية. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «اختبار Storybook والانحدار البصري»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد Storybook في مشروع React
  2. كتابة قصص CSF3
  3. Args وControls وإضافة Actions
  4. اختبار Storybook والانحدار البصري
← العودة إلى React Academy