كل اسم في سطر
MochaTest runner مرن: suites وhooks وasync وreporting. ركّب assertions وmocks بنفسك
ChaiAssertions فقط:
expect أو assert أو should. مش runnerJestTest framework كاملة: runner + expect + mocks + snapshots + coverage
VitestFramework كاملة تشارك Vite config والـ transforms؛ API قريبة من Jest والـ helper اسمه
viSinonFakes وspies وstubs وtimers. مفيد خصوصًا مع Mocha؛ اعمل
restoreSuperTestيبعت HTTP request للـ Node app بتاعتك ويختبر status وheaders وbody
MSWيعترض HTTP/GraphQL/WebSocket عند network boundary في Node أو browser
اختار بسرعة
Vite frontendVitest + Testing Library + MSW
Node API حديثةVitest + SuperTest
Node stack مركّبةMocha + Chai + Sinon + SuperTest
Jest قائمخليه، وزوّد MSW أو SuperTest حسب الـ boundary
API بتاعتكSuperTest
API خارجيةMSW
مراقبة call بسSpy أو fake
فرض error/returnStub أو fake متحكم فيها
الغلط المشهور
Mocha vs Chaiمش منافسين: الأول يشغّل والتاني يقارن
SuperTest vs MSWمش نفس الاتجاه: inbound لسيرفرك مقابل اعتراض outbound network
Sinon فوق Vitest/Jestغالبًا تكرار؛ استخدم
vi أو jest إلا لو ناقصك feature محددةكل حاجة mockاختبارات خضرا لبرنامج خيالي؛ اعمل mock للـ boundaries بس
نسيان cleanupاعمل restore للـ doubles وreset للـ MSW handlers
Vitest = Jest بالحرفراجع migration guide؛ module mocking والglobals مش مطابقين
خلصت الموضوع لما
🧠 اختبر نفسك
١) Mocha + Chai ناقصهم test doubles غنية. تضيف إيه؟
Sinon.
٢) Vitest test بيطلب API خارجية. تستخدم إيه؟
MSW لاعتراض الطلب عند الشبكة.
٣) عايز تختبر Express route كاملة. تستخدم إيه جنب runner؟
SuperTest.
٤) Vite project جديد: Jest ولا Vitest غالبًا؟
Vitest، لأنه يشارك نفس Vite pipeline. القرار يتغير لو عندك قيود أو ecosystem قائم على Jest.