I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

دليلك الشامل لاختبار تطبيقات رياكت (React E2E Testing) باستخدام سايبرس (Cypress)

دليلك الشامل لاختبار تطبيقات رياكت (React E2E Testing) باستخدام سايبرس (Cypress) أهلاً بيك يا بشمهندس في مقال جديد من سلسلة محترف تطوير الويب. تخيل معايا السينا

دليلك الشامل لاختبار تطبيقات رياكت (React E2E Testing) باستخدام سايبرس (Cypress)
Reading Count: 3

دليلك الشامل لاختبار تطبيقات رياكت (React E2E Testing) باستخدام سايبرس (Cypress)

أهلاً بيك يا بشمهندس في مقال جديد من سلسلة محترف تطوير الويب. تخيل معايا السيناريو ده: خلصت تطبيق رياكت (React) عظيم، وقعدت تعمله (Local Testing) والدنيا تمام، وطلعت النسخة على السيرفر (Production) ونمت وأنت حاسس بإنجاز كبير. الصبح تفتح الموبايل تلاقي العميل بيكلمك وعصبي جداً: "يا باشا زرار تسجيل الدخول مش شغال! والصفحة بتضرب خطأ (Error) لما بدوس عليها!". هنا قلبك بينزل في رجليك وتقول لنفسك: "ما انا كنت مجربه وشغال!".

الوجع ده كلنا عشناه، وهنا بتيجي أهمية اختبارات نهاية إلى نهاية أو ما يُعرف بـ اختبارات النهاية للطرف (End-to-End Testing) أو اختصاراً (E2E Testing). في المقال ده, هنعرف سوا إزاي نستخدم أداة جبارة زي سايبرس (Cypress) عشان نحاكي رحلة المستخدم الحقيقية، وننام بالليل واحنا مطمنين إن الكود بتاعنا سليماً مية في المية.

يعني إيه أساساً E2E Testing في رياكت؟

ببساطة شديدة، الـ (E2E Testing) هو نوع من أنواع اختبار البرمجيات اللي بيختبر التطبيق ككل. مش بنختبر مكون (Component) لوحده زي الـ (Unit Testing)، ولا صفحة لوحدها؛ احنا بنختبر السيستم كامل من أول ما المستخدم يفتح المتصفح (Browser)، لحد ما يكتب داتا، ويدوس على زرار، والتطبيق يكلم السيرفر (API)، والصفحة تتحدث قدامه.

في تطبيقات رياكت (React Applications)، الـ (E2E) بيمثل "رحلة المستخدم الحقيقية" (User Journey). يعني مثلاً: المستخدم بيدخل موقع تسوق، بيسجل دخول، بيدور على منتج، بيضيفه للسلة، وبيدفع. لو الخطوة دي كلها تمت بنجاح، يبقى الاختبار نجح. وهنا بيظهر دور (Cypress) كأفضل أداة لعمل ده بكل سهولة وسرعة.

ليه نختار سايبرس (Cypress) بالذات لمشروع رياكت؟

فيه أدوات كتير لاختبار الـ (E2E) زي Selenium و Puppeteer، بس (Cypress) بتتربع على العرش لعدة أسباب تقنية بتهم أي مبرمج عاوز ينجز شغله بذكاء:

  • سهولة التثبيت والإعداد (Setup & Installation): مش محتاج تظبط إعدادات معقدة أو تنزل درايفرات خارجية للمتصفح.
  • التشغيل الحي والتفاعلي (Real-time Reload): سايبرس بيفتح متصفح حقيقي قدامك، وبتشوف الخطوات وهي بتنفذ قدام عيونك خطوة بخطوة (Time Travel Debugging).
  • الانتظار التلقائي (Automatic Waiting): مش هتكح في الكود وتكتب (cy.wait()) كتير؛ سايبرس بيعرف لوحده امتى العنصر ظهر على الشاشة وامتى الـ (API) خلص.
  • مجتمع قوي ودعم ممتاز: الدكيومنتشن (Documentation) بتاعهم من أحسن الحاجات اللي ممكن تقراها في حياتك التقنية.

خطوة بخطوة: إعداد وتثبيت Cypress في مشروع React

عشان نطبق كلامنا عملي، افترض إن عندنا مشروع رياكت شغال. أول خطوة هنعملها هي تثبيت (Cypress) كحزمة تطوير (Dev Dependency) باستخدام حزمة الـ npm أو yarn:


npm install cypress --save-dev
# أو لو بتستخدمyarn
yarn add cypress --dev

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


npx cypress open

الأمر ده هيفتح نافذة رسومية جميلة (Cypress Desktop App). هيسألك نوع الاختبارات اللي عايز تعملها، هنختار (E2E Testing)، وبعدين هيظبط لك ملف اسمه cypress.config.js وفولدرات تانية زي cypress/e2e ودي اللي هنكتب فيها ملفات الاختبار بتاعتنا.

كتابة أول اختبار حقيقي: محاكاة رحلة المستخدم

تعالوا نتخيل أننا عايزين نختبر صفحة تسجيل دخول (Login Page) في تطبيق رياكت بتاعنا. عايزين نكتب كود يحاكي مستخدم حقيقي بيفتح الصفحة، بيككتب الإيميل والباسورد، ويدوس لوج إن، ويتأكد إنه دخل على الصفحة الرئيسية (Dashboard).

جوه فولدر cypress/e2e، هنعمل ملف جديد وليكن اسمه login.cy.js ونكتب فيه الكود ده:


describe('رحلة تسجيل الدخول (Login E2E Flow)', () => {
  it('يجب أن يسجل المستخدم بنجاح وينتقل للوحة التحكم', () => {
    // 1. فتح صفحة تسجيل الدخول
    cy.visit('http://localhost:3000/login');

    // 2. كتابة البريد الإلكتروني في حقل الـ Input
    cy.get('input[name="email"]')
      .type('[email protected]')
      .should('have.value', '[email protected]');

    // 3. كتابة كلمة المرور
    cy.get('input[name="password"]')
      .type('StrongPassword123');

    // 4. الضغط على زر تسجيل الدخول
    cy.get('button[type="submit"]')
      .click();

    // 5. التأكد من الانتقال للصفحة الرئيسية وظهور رسالة ترحيب
    cy.url().should('include', '/dashboard');
    cy.get('h1').should('contain', 'أهلاً بك يا صديقي');
  });
});

الـ Code Snippet اللي فوق ده بيوضح قد إيه لغة سايبرس قريبة جداً للغة البشر (Readable). احنا استخدمنا دوال واضحة زي cy.visit() و cy.get() و .type() و .click()، وكلها أوامر بتخاطب عناصر الـ DOM مباشرة.

أفضل الممارسات (Best Practices) لكتابة اختبارات E2E قوية

عشان شغلك كمبرمج يكون احترافي، فيه قواعد ذهبية لازم تمشي عليها وأنت بتكتب اختبارات سايبرس لتطبيق رياكت:

  • استخدام Data Attributes: بلاش تعتمد على الـ CSS Classes أو الـ IDs في اختيار العناصر لأنها بتتغير مع التحديثات. الأفضل تضيف خاصية مخصصة للاختبارات زي data-cy="login-btn" وتستدعيها في الكود بـ cy.get('[data-cy="login-btn"]').
  • عزل الاختبارات (Test Isolation): كل اختبار لازم يكون مستقل بذاته ومش معتمد على حالة اختبار قبله. استخدم beforeEach عشان ترجع التطبيق لنقطة البداية (Clean State).
  • التعامل مع الـ APIs (Mocking Network Requests): في بعض الأحيان مش عايز تكلم السيرفر الحقيقي عشان الـ Performance؛ سايبرس بيديك إمكانية تعمل (Intercept) للطلبات وتديها ردود جاهزة باستخدام cy.intercept().

خاتمة: نصيحة من أخ لتطوير مهاراتك التقنية

اختبارات الـ E2E باستخدام سايبرس مش مجرد "رفاهية" في شركتك، دي مهارة حقيقية بتفرق بين مبرمج عادي ومبرمج سنيور فاهم بيعمل ايه. في الأول ممكن تحس إن كتابة الاختبارات بتاخد وقت إضافي، بس تذكر دائماً: الوقت اللي بتضيعه في كتابة الاختبارات النهاردة، بيوفر عليك ساعات طويلة من تصحيح الأخطاء (Debugging) وبلاوي الـ Production بكره.

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


Share

Related posts

Aug 28, 2026 • 2 min read
Reading Count: 7
ازاي تعمل حركات وانتقالات احترافية في رياكت (React) باستخدام فريمر موشن (Framer Motion)

ازاي تعمل حركات وانتقالات احترافية في رياكت (React) باستخدام فريمر موشن (Framer Motion) يا هلا بيك ي...

Aug 27, 2026 • 2 min read
Reading Count: 4
ازاي تعمل حركات وانتقالات احترافية في رياكت (React Animations) باستخدام فريمر موشن (Framer Motion)

ازاي تعمل حركات وانتقالات احترافية في رياكت (React Animations) باستخدام فريمر موشن (Framer Motion) أ...

Aug 27, 2026 • 2 min read
Reading Count: 13
مقارنة بين Webpack و Vite: ليه كل مطوري React نقلوا لـ Vite؟

مقارنة بين Webpack و Vite: ليه كل مطوري React نقلوا لـ Vite؟ يا هلا بيك يا بشمهندس! فكرت في يوم من ا...