تكرار السؤال: …
الإجابة المختصرة
تمرر تطبيق Express أو Fastify إلى supertest التي تنشئ خادماً افتراضياً سريعاً يرسل طلبات HTTP محاكاة ويفحص رموز الحالة والترويسات ومحتوى الـ JSON.
الشرح
تتيح Supertest إجراء اختبارات تكاملية سريعة ومستقلة دون القلق بشأن تعارض المنافذ (Port Conflicts) عند تشغيل الاختبارات بالتوازي. يقوم Supertest باستدعاء دالة server.listen(0) تلقائياً على منفذ عشوائي مؤقت وإغلاقه فور اكتمال التوكيدات.
مثال بالكود
import request from "supertest";
import { app } from "./app";
test("GET /api/health returns 200", async () => {
const res = await request(app)
.get("/api/health")
.expect("Content-Type", /json/)
.expect(200);
assert.equal(res.body.status, "healthy");
});أخطاء شائعة
- تصدير السيرفر وهو يستمع بالفعل لمنفذ ثابت (app.listen(3000)) داخل ملف التطبيق الرئيسي بدلاً من فصل تعريف الـ app عن تشغيل الـ server.