البرمجة

اختبار وحدات راوتر Express في تطبيق Node.js باستخدام Mocha و Chai

في عالم تطوير الويب باستخدام Node.js وExpress، يعتبر اختبار وحدات الكود أمرًا حيويًا لضمان جودة وكفاءة التطبيق. في هذا السياق، سأوضح لك كيفية اختبار وحدات الراوتر (Router) في Express باستخدام أداة اختبار Mocha ومكتبة التأكيد Chai بالإضافة إلى Sinon للتلاعب بالدوال.

في البداية، يجب عليك تكوين بيئة الاختبار الخاصة بك. يمكنك القيام بذلك باستخدام Mocha كإطار اختبار و Chai للتأكد من نتائج الاختبار. يمكنك تثبيتهما باستخدام الأمر التالي:

bash
npm install --save-dev mocha chai

ثم يمكنك إنشاء ملف الاختبار الخاص بك (books.test.js) الذي يحتوي على مجموعة من الاختبارات. سأقوم بتوجيهك خطوة بخطوة عبر هذه العملية.

javascript
var chai = require('chai'); var should = chai.should(); var sinon = require('sinon'); var express = require('express'); var supertest = require('supertest'); var app = express(); describe('BookRoute', function() { it('should handle GET request to /api/books', function(done) { var controller = require('../../api/controllers/books'); var router = require('../../app/router/routes/books'); // Mock the controller function var controllerStub = sinon.stub(controller, 'index').returns('ok'); // Set up a test route using supertest supertest(app) .get('/api/books') .expect(200) .end(function(err, res) { // Perform assertions using Chai res.text.should.equal('ok'); controllerStub.calledOnce.should.be.true; // Restore the original controller function controller.index.restore(); done(); }); }); });

في هذا الاختبار، قمت بمحاكاة طلب GET إلى مسار ‘/api/books’ باستخدام Supertest، واستخدمت Sinon لتقليد وظيفة التحكم (controller) والتأكد من أنها تم استدعائها بشكل صحيح. استخدمت Chai لإجراء التأكيدات على النتائج.

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

المزيد من المعلومات

بالطبع، دعونا نوسع المزيد عن كيفية اختبار وحدات الراوتر في تطبيق Express باستخدام Mocha و Chai.

في الكود السابق، قمت بإنشاء اختبار لمسار ‘/api/books’ باستخدام Supertest لإجراء طلب GET. الآن، دعنا نستكشف بعض النقاط الإضافية ونتحدث عن الاستفادة من Sinon لاختبار تفاعلات الوحدة النمطية والتفاعلات بين الطبقات.

اختبار تفاعل وحدة التحكم (Controller):

يمكنك تحسين اختبارك لتشمل التحقق من تفاعلات وحدة التحكم (controller). على سبيل المثال، يمكنك اختبار استدعاء الوظائف الخاصة بالتحكم أو حتى تحقق من البيانات التي تم تمريرها إليها. هذا يساعد في التأكد من تنفيذ الوظائف بشكل صحيح وفقًا لتوقعات التصميم.

javascript
// ... describe('BookRoute', function() { it('should handle GET request to /api/books', function(done) { var controller = require('../../api/controllers/books'); var router = require('../../app/router/routes/books'); // Mock the controller function var controllerStub = sinon.stub(controller, 'index').returns('ok'); // Set up a test route using supertest supertest(app) .get('/api/books') .expect(200) .end(function(err, res) { // Perform assertions using Chai res.text.should.equal('ok'); controllerStub.calledOnce.should.be.true; // Additional controller interaction testing controllerStub.calledWith(sinon.match.object, sinon.match.object).should.be.true; // Restore the original controller function controller.index.restore(); done(); }); }); });

اختبار التكامل (Integration Testing):

بالإضافة إلى اختبارات الوحدات، يمكنك النظر إلى اختبارات التكامل لضمان تكامل العديد من الطبقات مثل الراوتر ووحدة التحكم وقاعدة البيانات. يمكنك استخدام قواعد بيانات افتراضية (مثل SQLite) لاختبار تأثير الطلبات على البيانات.

تكامل Supertest مع Chai:

يمكنك استخدام Chai بالتكامل مع Supertest لجعل التحقق من الاستجابات أكثر تفصيلاً ووضوحًا. يمكنك استخدام Chai HTTP لهذا الغرض:

bash
npm install --save-dev chai-http
javascript
var chaiHttp = require('chai-http'); chai.use(chaiHttp); // ... describe('BookRoute', function() { it('should handle GET request to /api/books', function(done) { // Set up a test route using chai-http chai.request(app) .get('/api/books') .end(function(err, res) { // Perform assertions using Chai res.should.have.status(200); res.body.should.be.a('object'); res.body.should.have.property('message').eql('ok'); done(); }); }); });

هذا يمكن أن يساعدك في تطوير نظام اختبار قوي وشامل لتطبيق Express الخاص بك، حيث يتيح لك Mocha و Chai و Sinon و Supertest إجراء اختبارات وحدات وتكامل فعّالة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

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