كيفية استخدام Supertest لاختبار واجهات برمجة تطبيقات HTTP في Node.js

Oliver Kingsley

Oliver Kingsley

14 أغسطس 2025

كيفية استخدام Supertest لاختبار واجهات برمجة تطبيقات HTTP في Node.js

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

في مشهد واجهات برمجة التطبيقات (API) سريع التطور، تحتاج الفرق إلى أمرين: ملاحظات سريعة على مستوى الكود والتحقق الموثوق الشامل عبر البيئات. يقدم Supertest الأول – تأكيدات HTTP فائقة السرعة لخدمات Node.js. وعندما تكون مستعدًا للتعاون بين الأدوار، وتشغيل اختبارات السيناريو، ومحاكاة التبعيات، ونشر الوثائق، فإن منصة اختبار واجهات برمجة التطبيقات (API) مثل Apidog تكمل الصورة. يشرح هذا الدليل الرسمي والموضوعي كيفية استخدام Supertest لاختبار واجهات برمجة التطبيقات، وأين يتألق، وكيفية إقرانه بـ Apidog لتسريع التسليم بثقة.

Apidog
زر

ما هو Supertest؟

Supertest هي مكتبة Node.js خفيفة الوزن لاختبار خوادم HTTP. تعتمد على superagent وتتيح لك كتابة تأكيدات معبرة ضد رموز الحالة والرؤوس ونصوص الاستجابة – دون الحاجة إلى تشغيل عملاء خارجيين. إنها مثالية عندما:

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

زر

تثبيت وإعداد Supertest

يمكنك تثبيت Supertest في دقائق. استخدم npm أو pnpm أو yarn:

# npm   npm install --save-dev supertest jest

# pnpm  pnpm add -D supertest jest

# yarn

yarn add -D supertest jest

واجهة Express API بسيطة (app.js):

const express = require('express');

const app = express();



app.get('/greet', (req, res) => {

  const name = req.query.name || 'World';

  res.json({ message: `Hello, ${name}!` });

});



module.exports = app;

اختبار بسيط (app.test.js) باستخدام Supertest + Jest:

const request = require('supertest');

const app = require('./app');



describe('GET /greet', () => {

  it('greets anonymously', async () => {

    const res = await request(app)

      .get('/greet')

      .expect('Content-Type', /json/)

      .expect(200);



    expect(res.body.message).toBe('Hello, World!');

  });

  it('greets by name', async () => {

    const res = await request(app)

      .get('/greet?name=Alice')

      .expect('Content-Type', /json/)

      .expect(200);



    expect(res.body.message).toBe('Hello, Alice!');

  });

});

تحديث package.json لتشغيل الاختبارات:

{

  "scripts": {

    "test": "jest"

  }

}

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

npm test

إذا كنت تفضل Mocha أو Vitest، فإن Supertest يعمل بنفس الطريقة – واجهة برمجة التطبيقات .expect() متطابقة.


كتابة تأكيدات Supertest رائعة

تأتي قوة Supertest من تأكيداته المتسلسلة – سريعة الكتابة وسهلة القراءة. إليك الأنماط التي ستستخدمها يوميًا:

request(app)

  .get('/users')

  .expect(200)

  .expect('Content-Type', /json/);
request(app)

  .get('/users')

  .expect(200)

  .expect(res => {

    if (!Array.isArray(res.body)) throw new Error('Expected an array');

    if (res.body.length === 0) throw new Error('Expected at least one user');

  });
request(app)

  .get('/health')

  .expect(200)

  .expect({ status: 'ok' });



request(app)

  .get('/health')

  .expect(200)

  .expect(/"status":"ok"/);
request(app)

  .post('/posts')

  .set('Authorization', 'Bearer test-token')

  .send({ title: 'Hello', body: 'World' })

  .expect(201)

  .expect(res => {

    if (!res.body.id) throw new Error('Missing id');

  });
const agent = request.agent(app);

await agent.get('/login').expect(200);

await agent.get('/me').expect(200).expect(res => {

  if (!res.body.user) throw new Error('Expected authenticated user');

});
نصيحة: اجعل الاختبارات صغيرة ومحددة. يتفوق Supertest في التحقق من وحدات التحكم (controllers) والبرمجيات الوسيطة (middleware) والمحولات (adapters) بشكل منفصل.

Supertest في CI/CD والمستودعات المتعددة (Monorepos)

للحفاظ على جودة متسقة، قم بتشغيل Supertest في التكامل المستمر (CI) لكل طلب سحب (pull request). إعداد نموذجي:

مثال على مقتطف GitHub Actions:

name: api-tests

on: [push, pull_request]

jobs:

  test:

    runs-on: ubuntu-latest

    steps:

      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4

        with:

          node-version: '20'

      - run: npm ci

      - run: npm test -- --ci

في المستودعات المتعددة (monorepos)، قم بتشغيل الاختبارات المتأثرة فقط وتخزين node_modules مؤقتًا لتسريع حلقات التغذية الراجعة. إن النفقات العامة (overhead) الدنيا لـ Supertest تجعلها مناسبة تمامًا لقواعد الأكواد الكبيرة.


متى تستخدم منصة اختبار واجهة برمجة التطبيقات (API)

Supertest ممتاز للحصول على ملاحظات سريعة على مستوى الكود. لكن واقع الإنتاج يتطلب المزيد:

هنا تتألق منصة اختبار واجهة برمجة التطبيقات مثل Apidog. توحد تصميم واجهة برمجة التطبيقات، والمحاكاة، والاختبار، وتصحيح الأخطاء، والتوثيق للحفاظ على توافق الفرق ومتانة بوابات الجودة لديك.

زر
واجهة مستخدم Apidog للاختبار

لماذا يكمل Apidog أداة Supertest


سير عمل مشترك: Supertest + Apidog

استخدم Supertest للفحوصات التي تركز على المطورين وApidog للتعاون الشامل. إليك تقسيم عملي للمسؤوليات:

المهمة
Supertest
Apidog
فحوصات وحدة التحكم/البرمجيات الوسيطة
ممتاز
مكمل
تراجعات العقد السريعة (الحالة/الرؤوس)
ممتاز
ممتاز
حوكمة المخطط (OpenAPI)
يدوي
من الدرجة الأولى
خوادم المحاكاة للواجهة الأمامية
محدود
مدمج
سيناريوهات تعتمد على البيانات
محدود
من الدرجة الأولى
تنسيق التكامل المستمر (CI) عبر البيئات
جيد
من الدرجة الأولى
تعاون الفريق/الوثائق
بسيط
من الدرجة الأولى

مثال على سير العمل:


أنماط Supertest المتقدمة

بعض النصائح الإضافية التي تؤتي ثمارها:


الخاتمة: نهج متوازن لجودة واجهة برمجة التطبيقات

يتم بناء واجهات برمجة التطبيقات عالية الجودة بالسرعة والدقة. يوفر Supertest للمطورين طريقة سريعة ومعبرة للتحقق من نقاط النهاية بالقرب من الكود – وهو مثالي لحلقات التغذية الراجعة الضيقة واكتشاف الانحدارات قبل أن تنتشر من الفرع. إنه بسيط وموثوق وتم اختباره في العديد من الواجهات الخلفية لـ Node.js.

مع نمو الأنظمة، ومع ذلك، تحتاج إلى التعاون، وحوكمة العقود، والتنفيذ الواعي بالبيئة. هنا ترفع Apidog – وهي منصة اختبار واجهة برمجة تطبيقات متكاملة – مستوى سير عملك. من خلال توحيد تصميم العقود (OpenAPI)، وخوادم المحاكاة، والتأكيدات المرئية، ومتغيرات البيئة، وتنسيق التكامل المستمر (CI)، تساعد Apidog الفرق على التحرك بخطوات متزامنة من الفكرة إلى التسليم. يمكن للواجهة الأمامية والخلفية وضمان الجودة مشاركة نفس مصدر الحقيقة بينما يواصل Supertest حماية مسارات الكود الخاصة بك بتأكيدات سريعة ومحددة.

إذا كنت تريد سرعة واثقة، فاستخدم كليهما:

ينتج عن هذا النهج المتوازن واجهات برمجة تطبيقات ليست صحيحة اليوم فحسب، بل مرنة أيضًا مع تطور منتجك. ابدأ في كتابة فحوصات Supertest الخاصة بك الآن – واجعلها حقيقة في مسار عمل جاهز للإنتاج باستخدام Apidog.

زر

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات