اختبار في JavaScript (Node.js): الأطر والأدوات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

اختبار في JavaScript (Node.js): الأطر والأدوات



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



1. الأنواع الرئيسية للاختبارات

قبل اختيار الأداة، من المهم فهم أنواع الاختبارات التي ستكتبها:

  • اختبارات الوحدة (Unit) — تتحقق من الوظائف أو الوحدات الفردية بشكل منعزل.
  • الاختبارات التكاملية — تتحقق من التفاعل بين عدة وحدات أو قاعدة بيانات أو واجهات برمجة تطبيقات خارجية.
  • اختبارات End-to-End (E2E) — تحاكي إجراءات المستخدم في المتصفح أو التطبيق الكامل.


2. Jest — إطار عمل شامل من Facebook

Jest هو الإطار الأكثر شيوعًا لاختبار JavaScript. يتضمن كل ما هو ضروري: مشغل الاختبارات، مكتبة التأكيدات (assertions)، الـ Mock، ودعم مدمج لتغطية الكود.



التثبيت:

npm install --save-dev jest


مثال لاختبار وحدة بسيط لدالة الجمع:

// sum.jsfunction sum(a, b) {  return a + b;}module.exports = sum;

// sum.test.jsconst sum = require('./sum');

test('جمع 1 + 2 يساوي 3', () => { expect(sum(1, 2)).toBe(3);});


تشغيل الاختبارات:

npx jest


مزايا Jest:

  • بدون إعدادات مسبقة لمشاريع React و Node.
  • تشغيل تلقائي في وضع المراقبة (watch-mode).
  • الـ Mock والجواسيس (spies) المدمجة.
  • دعم الكود غير المتزامن (async/await, callbacks).


3. Mocha + Chai — مجموعة مرنة

Mocha هو مشغل اختبارات مرن لا يفرض مكتبة تأكيدات معينة. غالبًا ما يُستخدم مع Chai — مكتبة ذات بناء جملة واضح (should, expect, assert).



التثبيت:

npm install --save-dev mocha chai


مثال اختبار مع Chai:

// calculator.jsfunction divide(a, b) {  if (b === 0) throw new Error('القسمة على صفر');  return a / b;}module.exports = { divide };

// test.jsconst { expect } = require('chai');const { divide } = require('./calculator');

describe('آلة حاسبة', function() { it('يجب أن تقسم رقمين', function() { expect(divide(10, 2)).to.equal(5); });

it('يجب أن يرمي خطأ عند القسمة على صفر', function() { expect(() => divide(10, 0)).to.throw('القسمة على صفر'); });});


التشغيل:

npx mocha test.js


Mocha مفيد بشكل خاص عندما تحتاج إلى ضبط دقيق للتقارير والتكامل مع أدوات أخرى.



4. Supertest — اختبار خوادم HTTP

Supertest هي مكتبة للاختبار التكاملي لخوادم Express (وغيرها). تسمح بإرسال طلبات HTTP والتحقق من الاستجابات.



التثبيت:

npm install --save-dev supertest


مثال اختبار لتطبيق Express:

// app.jsconst express = require('express');const app = express();app.get('/hello', (req, res) => res.json({ message: 'مرحبا بالعالم' }));module.exports = app;

// app.test.jsconst request = require('supertest');const app = require('./app');

describe('GET /hello', function() { it('يستجيب بـ json', function(done) { request(app) .get('/hello') .expect('Content-Type', /json/) .expect(200) .then(response => { expect(response.body.message).toBe('مرحبا بالعالم'); done(); }); });});


يتناسب Supertest بشكل ممتاز مع Jest أو Mocha.

توصيات