الآخر

Cheat Sheet: أدوات الاختبار

Mocha · Chai · Jest · Vitest · Sinon · SuperTest · MSW
🎯 الهدف: تفتكر دور كل أداة والتركيبات المنطقية في صفحة واحدة.

كل اسم في سطر

MochaTest runner مرن: suites وhooks وasync وreporting. ركّب assertions وmocks بنفسك
ChaiAssertions فقط: expect أو assert أو should. مش runner
JestTest framework كاملة: runner + expect + mocks + snapshots + coverage
VitestFramework كاملة تشارك Vite config والـ transforms؛ API قريبة من Jest والـ helper اسمه vi
SinonFakes وspies وstubs وtimers. مفيد خصوصًا مع Mocha؛ اعمل restore
SuperTestيبعت 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.