Mocks و Fakes
Mocks and Fakes
Mocks و Fakes
عندما تعتمد دالة على API أو قاعدة بيانات أو وقت النظام، يصبح الاختبار أصعب. الحل هو تعريف interface للتبعية، ثم تمرير fake في الاختبار. TypeScript يضمن أن fake يطابق العقد نفسه الذي يستخدمه الكود الحقيقي.
لا تبنِ mock ضخماً إذا كان fake صغير يكفي. fake هو تنفيذ بسيط predictable. مثلاً UserStore يرجع مستخدماً ثابتاً. هذا أسهل من محاكاة مكتبة كاملة.
مثال عملي
الدالة لا تعرف هل store حقيقي أو fake. تعرف فقط العقد.
أدوات الاختبار — Test Runners
Vitest هو runner الاختبار الكانوني في 2026 لمشاريع TypeScript. سريع، يدعم ESM، ويعمل مباشرة مع TypeScript بدون إعداد:
npm install -D vitest
اكتب ملفات *.test.ts وشغّلها:
npx vitest
مثال اختبار كامل مع mock:
node:test (Node.js ≥ 20 builtin) هو البديل بدون dependencies:
import { describe, it } from "node:test";
import assert from "node:assert/strict";
describe("upper", () => {
it("uppercases", () => assert.equal(upper("hi"), "HI"));
});
استخدم node:test عندما تريد صفر dependencies. استخدم Vitest في مشاريع كبيرة تستفيد من watch mode والتقارير المتقدمة.
التصميم للاختبار
مرر التبعيات بدلاً من إنشائها داخل الدالة عندما يكون ذلك مناسباً. هذا يقلل coupling.