كيف يمكنك اختبار تطبيقات Node.js الخاصة بك مع Ava.js

لماذا قد ترغب في كتابة حالات اختبار لتطبيقاتك ، على أي حال؟ حسنًا ، إنه سؤال يحاول عدد من المطورين مراوغته ، لمجرد أنه يتطلب جهدًا ووقتًا ، ولأن الاختبار اليدوي أكثر إرضاءً. انقر… انقر… املأ نموذج… انقر… Presto. تطبيقي يعمل ، واجهات برمجة التطبيقات الخاصة بي جيدة ، كل شيء رائع.

تقديم سريع لما يقرب من 30 طلب سحب يوميًا يتم دمجها في فرعك الرئيسي. الآن ما هو شعورك حيال اختبار 30 ميزة يدويًا أو إعادة هيكلة كتلة من التعليمات البرمجية وكسر كود شخص آخر دون علم؟

في هذه المرحلة ، ستقول عادةً ، "أتمنى لو أنني كتبت بعض حالات الاختبار للبدء بها." لذا خذ بعض الإلهام من Facebook: لقد شاركوا مقالًا رائعًا هنا ، يشرحون كيف طور الفريق React 16 مع التطوير القائم على الاختبار.

من السهل جدًا إنشاء تطبيقات العقدة بحد ذاتها. هناك الكثير من الدعم المجتمعي ، وستحصل عادةً على ما تحتاجه من خلال طرح الأسئلة حولك. يمكن أن تكون تطبيقات Node خادمًا وكيلًا رائعًا لعدد من خوادم API ، مما يجعل اختبار نقطة النهاية أكثر أهمية.

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

مرحبا افا

Ava هو عداء اختبار JavaScript. إنه يستخدم طبيعة I / O غير المتزامنة للعقدة ويقوم بإجراء اختبارات متزامنة ، وبالتالي تقليل أوقات الاختبار بشكل كبير.

هيا بنا نبدأ

في دليل العمل الخاص بك ، قم بإنشاء package.jsonملف وإضافة الحزم التالية:

yarn add ava babel-register

قم بإنشاء مجلد الاختبارات . من المفيد الاحتفاظ باختباراتك في مكان واحد. يمكنك الاحتفاظ بوحدات الاختبار / وحدات التحكم هناك أيضًا.

package.jsonيجب أن تبدو المحدثة الآن كما يلي:

{ "name": "ava-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start" : "node server.js", "test": "node_modules/.bin/ava tests/**/*.test.js --verbose", "test:watch": "node_modules/.bin/ava --verbose --watch" }, "dependencies": { "ava": "^0.23.0", "babel-register": "^6.26.0" }, "ava": { "require": [ "babel-register" ] }}

و babel-registertranspiles ES6 رمز وقت في حال تشغيل بعض الأجهزة على إصدار عقدة القديم والذي لا يعتمد ES6. و verboseسوف علم تعطينا بعض الانتاج أنيق اعتمادا على ما إذا تجاربنا تفشل أو تمر. هذه العلامة مفيدة جدًا أثناء تصحيح أخطاء اختباراتك ، ولكن إذا كتبت مئات حالات الاختبار ، فقد ترغب في إيقاف تشغيلها.

في حالتك tests/index.test.js، يمكنك إضافة حالة الاختبار الأولى:

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

yarn testيمنحك التشغيل من وحدة التحكم لديك الإخراج التالي:

في حالة فشل أحد اختباراتنا ، سنحصل على:

هذا هو جمال verboseالوضع. يمنحك مكدس خطأ نظيف ولا شيء من مكدس تتبع المكدس. في حالة حدوث خطأ في وقت التشغيل ، سترى بعض تمييز بناء الجملة الجيد أيضًا.

يمكنك حقًا استغلال Ava API واستخدام أداة التأكيد القوية الخاصة بها لكتابة حالات اختبار مرنة.

إعداد خادم Node الخاص بك

حتى الآن ، تحدثنا فقط عن الإعداد الأساسي لكتابة الاختبارات - ولنكن صريحين ، الأمر بسيط جدًا. لذا في هذا القسم ، سأشرح كيف يمكن فصل خادم Node بسيط واختبار نقاط النهاية الخاصة به مع Ava.

yarn add express body-parser 

في دليل العمل الخاص بك ، قم بإنشاء app.jsوإضافة المقتطف التالي:

السبب في أنني قمت بتصدير وحدة التطبيق هو أنه يمكن استخدامها مع خادم API الوهمي الذي ستحتاجه Ava لإجراء اختباراتك.

أنشئ ملفًا جديدًا server.jsواستورد وحدة التطبيق لبدء الخادم.

يجب أن يبدأ تشغيل npm start الخادم الخاص بك ، ويجب أن يمنحك الانتقال إلى // localhost / status end point استجابة 200OK.

رائع ، لذلك خادمنا يعمل.

تظهر نظرة سريعة على الكود أننا أنشأنا 3 نقاط نهاية: نقطة نهاية الحالة ونقطة نهاية الترحيب ونقطة نهاية التسجيل. هناك بعض التحقق من صحة نقطة نهاية السجل ، والذي يلقي 400 (طلب غير صالح) في حالة فقدان معلمات ما بعد النص. طريقة التحقق أعلاه ساذجة جدًا ، لكنها تخدم غرضنا المتمثل في اختبار نقطة النهاية - لذا سألتزم بها.

نصيحة احترافية: يمكنك دائمًا تعيين معالجة الأخطاء لبرامج وسيطة واستخدامها لاستدعاء معالج الأخطاء.

دعنا نكتب المزيد من الاختبارات حول نقطة النهاية. وسوف تستخدم supertestوحدة. إنه مشابه جدًا للوكيل الفائق: فهو يستخدم نفس واجهات برمجة التطبيقات ، وله بنية مشابهة. لذلك ، الفوز.

لقد قمنا باستيراد appالوحدة التي تم تصديرها مسبقًا وقمنا بتمريرها إلى اختبار فائق. يقوم Supertest بإنشاء خادم وكيل ، والذي سيصل بعد ذلك إلى جميع عناوين URL لنقاط النهاية المذكورة في الاختبار. يمكنك استخدام deepEqualالطريقة لاختبار الكائن بأكمله أو isالطريقة لاختبار كل حقل يدويًا.

سيؤدي إجراء اختبار الغزل إلى ما يلي:

عظيم. لقد كتبنا أربعة اختبارات وكلها اجتازت كما هو متوقع. لكن ماذا عن تغطية الكود؟

مرحبا مدينة نيويورك

لإنشاء تقارير التغطية الجميلة هذه ، سنستخدم nyc وهي واجهة سطر أوامر Istanbul.js. إنه سهل الاستخدام للغاية ولديه الكثير من الخيارات القابلة للتكوين. من أجل البساطة ، سنستخدم تكوينًا بسيطًا للغاية.

yarn add nyc --save

في مدينة نيويورك قيادة يلتف بشكل جيد على القيادة اختبار الخاص بك وسوف إنشاء مجلد التغطية (وهذا ينبغي أن يكون في gitignore الخاص بك) في دليل العمل الخاص بك.

تحديث الخاص بك package.jsonكما هو موضح أدناه:

{ "name": "ava-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "node_modules/.bin/ava tests/**/*.test.js --verbose", "test:watch": "node_modules/.bin/ava --verbose --watch", "cover": "node_modules/.bin/nyc yarn test", }, ... other dependencies "nyc": { "reporter": [ "lcov", "text", "html" ] }}

يمكن تكوين أنواع المراسل الذي تريده في قسم مدينة نيويورك من ملفك package.json.

دعونا تشغيل غطاء الغزل:

حسنًا ، ليس لدينا تغطية بنسبة 100٪ حتى الآن. دعونا نصلح ذلك. أولاً ، تريد الانتقال إلى مجلد تغطية دليل العمل الخاص بك ومعرفة أي جزء من التعليمات البرمجية لم تتم تغطيته.

من الواضح أننا فوتنا بقعة. دعنا نضيف حالة الاختبار النهائية في tests/index.tests.jsالملف ، والتي ستغطي app.jsالملف بأكمله .

test('Create a new user', async t => { let username = 'some-hase' const password = 'some-hase' const response = await request(app) .post('/register') .send({username, password});
t.is(response.status, 200); t.is(response.body.message, `new user created`);});

و الأن….

المعزوفة.

نصيحة احترافية: إذا كنت ترغب في إضافة حد لحالات الاختبار ، يمكنك إضافة برنامج نصي في ملف package.json الخاص بك.
"check-coverage": "node_modules/.bin/nyc check-coverage --lines 100 --functions 100 --branches 100 --statements 100"

يمكن تشغيل هذا الأمر كجزء من أنظمة بناء خطوط الأنابيب travis / gitlab.

استنتاج

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

ملاحظة: آمل أن تعجبك المقالة ، صححني إذا كنت مخطئًا في أي مكان. دائما نرحب بالمناقشة.