مش وثيقة، برنامج
الاختبار برنامج صغير يستدعي كودك ويقارن الناتج بحاجة أنت كاتبها. لو مفيش مقارنة، التشغيل الأخضر مش معناه إن السلوك صح. معناه إن الملف خلّص من غير ما يقع.
Node جاي مع مشغّل اختبار من غير حزمة زيادة. الملفين امتدادهما mjs عشان import يشتغل حتى لو المشروع مش معلّم إنه ES modules.
export function total(prices) { return prices.reduce((sum, n) => sum + n, 0);}import test from "node:test";import assert from "node:assert/strict";import { total } from "./total.mjs";test("قائمة فاضية", () => { assert.equal(total([]), 0);});test("يجمع رقمين", () => { assert.equal(total([10, 5]), 15);});node --testassert.equal يقارن بـ ===. لو مختلف، الاختبار يرسب والأمر يطلع بغير صفر. الـ CI مش بيقرا جملة “كل حاجة تمام”. بيبص على رقم الخروج.
إيه اللي يستاهل اختبار هنا؟
مش كل سطر. ابدأ بحاجة لو اتغيرت هتكسر حد: حساب، شرط، تحويل بيانات. شكل الزر ومسافة Prettier مش اختبار. ESLint مش بديل عن اختبار: اللينتر مش هيشوف إن الجمع رجّع رقم غلط.
نفس الفكرة: ملفات اختبار، تأكيدات، وأمر يفشل لو واحد رسب. الفرق واجهة والأدوات اللي حواليها. الفريق يختار واحد ويثبّت أمره في package.json عشان الـ CI مناديهوش من الذاكرة.
حط "test": "node --test" في scripts. بعد كده npm test على جهازك وعلى السيرفر. تغيير المشغّل يبقى تغيير السكربت، مش تغيير عشرين ملف CI.