الإختبارات في جافاسكربت - JavaScript Testing (الجزء الأول)

السلام عليكم و رحمة الله تعالى و بركاته

في هذا المقال سوف نتكلم عن موضوع الإختبارات في الجافاسكربت (javascript testing).
يهدف هذا المقال إلى إطلاعك على أهم الاسباب و المصطلحات و الأدوات و الأساليب لـ : اختبارات الجافاسكربت (javascript testing).

  • ما هو الإختبار (What is Testing):
    بكل بساطة الإختبار (Testing) هو اننا نقوم بتشغيل البرنامج أو التطبيق الخاص بنا قصد إيجاد الأخطاء البرمجية. على سبيل المثال قمنا بعمل دالة تٌنفذ امر معين , نقوم بعمل تشغيل لهاته الدالة بنمط معين قصد تحليل سلوك هاته الدالة و هل ترجع لنا النتيجة المتوقعة أم لا .
    اذا العملية تحدث كالتالي :
    – نقوم ببرمجة الكود الذي سيؤدي غرض معين (write code).
    – كتابة الإختبار أو تحديد النتيجة المتوقعة (expected result).
    – تنفيذ الإختبار (Test).
    – سيكون لدينا إما نجاح الإختبار (success) بعد ذلك يمكننا إستخدام الكود بأريحية أو سيكون لدينا فشل في الإختبار (Failure) و منه سوف نرجع للخطوة الأولى (write code) و نقوم بتصليح المشاكل البرمجية اعتمادا على نتائج الإختبار.

  • لماذا نختبر التطبيقات (Why Testing) :
    – تحديد سبب و مكان الأخطاء البرمجية .
    – توفير وقتك , فبدل من أنك تقوم بتضييع وقت كبير في محاولة إيجاد الأخطاء , عملية الاختبار ستقوم بذلك بدلا منك و سيكون ايجاد الأخطاء سهلا لايجادها و تصحيحها.
    – تحسين جودة الكود و تقليل الأخطاء البرمجية.

  • أنواع الإختبارات (Test Types) :
    بشكل عام ، فإن أهم أنواع الاختبارات لموقع الويب هي :
    – Unit Tests
    – Integration Tests
    – Functional Tests (also known as e2e tests)

— النوع الأول و هو الـ Unit Tests :
تعني إختبار الدوال functions أو المناطق - أو الوحدات - في الأكواد. و هذا يعطينا القدرة على التوثق من أن الدوال functions تعمل بالشكل المتوقع منها. هذا يعني أن أي دالة بناء على عدد من الادخالات inputs, نستطيع تحديد ما إذا كانت الدالة تعود بمخرجات outputs صحيحة أم لا, و يمكننا بعدها أن نتعامل بسلاسة مع الأخطاء التي تحدث أثناء التنفيذ بناء على مدخلات غير صالحة.

النوع الثاني و هو الـ Integration Tests :
و هو اختبار عمليات عبر عدة وحدات . على سبيل المثال لدينا دالة تعتمد على دالة أخرى .

النوع الثالث و هو الـ Functional Tests و يُعرف ايضا بـ ( e2e Tests ) :
في هذا الإختبار نحن نتعامل مع السيناريو الذي يمشي عليه التطبيق . فنحن نقوم باختبار المتصفح نفسه من خلال التحكم في المتصفح او الموقع . مثال على ذلك لدينا ارسال رسالة التفعيل عن طريق الـ Gmail . سيكون لدينا عدة خطوات لإكتمال العملية بنجاح (على شكل سيناريو).

  • تشغيل الإختبارات (Running Tests) :
    – يمكن تشغيل الاختبارات في المتصفح عن طريق انشاء صفحة HTML و تضمين مكتبات و اطر العمل الخاصة بالإختبار . أما الاختبارات فيتم تضمينها على شكل ملفات جافاسكربت.
    – يمكن تشغيل الإختبارات أيضا في الـ node.js عن طريق إستيراد الاختبارات + مكتبات أو أطر عمل الخاصة بالإختبار . و الطريقة الشائعة هي باستخدام الـ jsdom . هاته الطريقة أفضل و اسرع من اننا نقوم بعمل الاختبارات في المتصفح .

  • درجة التعقيد و التكرار في الأنواع الثلاثة في عمل الإختبار :
    درجة التعقيد : (الترتيب تنازلي من الأسهل إلى الأعقد) :
    الـ Unit Tests.
    الـ Integration Tests.
    الـ Functional Tests.
    درجة التكرار : ( تكرار كتابة الإختبارات , الترتيب تصاعدي من الأقل تكرار إلى الأعلى تكرار) :
    الـ Functional Tests. (كتابة اكواد اختبار قليلة)
    الـ Integration Tests. (كتابة اكواد اختبار متوسطة)
    الـ Unit Tests. (كتابة الكثير من أكواد الإختبار)

  • أنواع أداوت الإختبار (Test Tools Types) :
    الـ Test launchers :
    تشغيل الاختبارات سواء في المتصفح أو في بيئة الـ node.js مع الإعدادات التي يقوم بتخصيصها المستخدم و ذلك عن طريق CLI او الـ UI. اي عن طريق تنفيذ اوامر في الطرفية او التيرمنال او عن طريق برامج او واجهات . (Karma, Jasmine, Jest, TestCafe, Cypress)
    الـ Testing structure :
    تساعدك على ترتيب ملفات الاختبار الخاصة بك. (Mocha, Jasmine, Jest, Cucumber, TestCafe, Cypress)
    الـ Assertion functions :
    تحقق مما إذا كانت النتائج التي يتم إرجاعها من الاختبار كما هو متوقع. (Chai, Jasmine, Jest, Unexpected, TestCafe, Cypress)
    الـأدوات التي تقوم بـتوليد وعرض اختبار التقدم والنتائج.
    (Mocha, Jasmine, Jest, Karma, TestCafe, Cypress)
    الـ Mocks, spies, and stubs :
    لعزل أجزاء معينة من الاختبارات والتقاط آثارها الجانبية. (Sinon, Jasmine, enzyme, Jest, testdouble)
    الـ Generate code coverage :
    تقارير لمعرفة مقدار الشفرة التي تغطيها الاختبارات الخاصة بك. (Istanbul, Jest, Blanket)
    الـ Browser Controllers :
    محاكاة إجراءات المستخدم للاختبارات الوظيفية. (Nightwatch, Nightmare, Phantom, Puppeteer, TestCafe, Cypress)

5 Likes

قليل من يهمه الاختبارات… لكنها مرحلة هامة جدا

3 Likes

تماما . هههه تغلب بعض الشيىء لكنها شيىء مهم جدا كما قلت <3 بالإضافة إلى توثيق الكود

2 Likes

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

والحقيقة هي شيء لابد منه في البرمجيات ولكن ما يحصل هو عمل skip لها في كثير من الاحيان والنتيجه مشاكل تظهر في المستقبل لم تكن بالحسبان.

2 Likes

رائع كالعادة :+1:

1 Like

العفــو :smiling_face_with_three_hearts:

أرى أنه عند العمل مع فريق ممكن لا يتم عمل skip لهاته المرحلة . لكـن كشخص لوحده يعمل على مشروعه الجانبي ههه أكاد أجزم لا يستخدم الإختبارات .

2 Likes