البرنامج التعليمي لإطار عمل الياسمين: اختبار الوحدة مع مثال

⚡ ملخص ذكي

ياسمين هي الشخصية التي تحركها السلوكيات Javaإطار عمل لاختبار البرامج النصية يقوم بتشغيل اختبارات وحدة Node.js بدون متصفح أو DOM، باستخدام كتل الوصف ومواصفاته ومطابقات التوقعات للتحقق من أن كل دالة مُصدَّرة تتصرف كما هو موثق.

  • 🔘 دور الإطار: ياسمين تختبر أي Javaنص برمجي بدون متصفحات أو DOM أو مكتبات مساعدة.
  • ☑️ إعداد البيئة: قم بتثبيت الوحدة، ثم قم بتشغيل jasmine init، ثم افحص spec/support/jasmine.json.
  • ✅ نمط المواصفات: يصف اسم مجموعة، ويحدد مواصفات، ويتوقع النتيجة.
  • 🧪 المطابقات: تغطي العبارات toBe و toEqual و toContain و toThrow و toHaveBeenCalled معظم التأكيدات.
  • 🛠️ العداء العصري: تحل حزمة jasmine المُحدثة محل وحدة jasmine-node غير المُحدثة.
  • 📊 اختيار الإطار: تقوم Jasmine بشحن التأكيدات والجواسيس، بينما تضيف Jest عمليات التشغيل المتوازية واللقطات.

دليل استخدام إطار عمل Jasmine لاختبار وحدات تطبيقات Node.js

ما هو ياسمين جي إس؟

الياسمين هو مصدر مفتوح والأكثر شعبية Javaإطار عمل اختبار مكتبة البرامج النصية لاختبار أي نوع من Javaتطبيق النص. تتبع ياسمين إجراءات التطوير الموجه بالسلوك (BDD) لضمان أن كل سطر من Javaتم اختبار بيان البرنامج النصي بشكل صحيح.

ما هو إطار الياسمين المستخدم؟

يُعدّ الاختبار عنصرًا أساسيًا لأي تطبيق. بالنسبة لاختبار الوحدات في Node.js، يُطلق على إطار العمل المتاح للاختبار اسم Jasmine. في أوائل عام 2000، كان هناك إطار عمل للاختبار Javaسيناريو تطبيقات تسمى JsUnit. Later تم ترقية هذا الإطار وهو يُعرف الآن باسم Jasmine.

الياسمين يساعد في الآلي وحدة التجاربوهو أمر أصبح ممارسة أساسية عند تطويرping ونشر تطبيقات الويب الحديثة.

في هذا البرنامج التعليمي لـ Jasmine، ستتعلم كيفية إعداد بيئتك باستخدام Jasmine وكيفية تشغيل اختبارات Jasmine لأول تطبيق Node.js.

ياسمين لاختبار تطبيقات Node.js

ياسمين هو التنمية المدفوعة بالسلوك (BDD) إطار الاختبار ل Javaالنص. إنه يفعل لست الاعتماد على المتصفحات، DOM، أو أي Javaإطار عمل برمجي. لذا، فهو مناسب للمواقع الإلكترونية. Node.js المشاريع، أو أي مكان آخر Javaيمكن تشغيل البرنامج النصي. لبدء استخدام Jasmine، تحتاج أولاً إلى تنزيل وتثبيت وحدات Jasmine اللازمة.

كيفية إعداد بيئة اختبار الياسمين

في الخطوة التالية من هذا الدرس التعليمي حول Jasmine Node.js، ستحتاج إلى تهيئة بيئتك وفحص ملف إعدادات Jasmine. توضح الخطوات التالية كيفية إعداد Jasmine في بيئتك.

الخطوة 1) تثبيت وحدات NPM
تحتاج إلى قم بتثبيت NPM وحدة jasmine لاستخدام إطار عمل Jasmine من داخل تطبيق Node. لتثبيت وحدة jasmine-node، نفّذ الأمر التالي.

npm install jasmine-node

ملاحظة الإصدار (2026): لا يزال الأمر التاريخي المذكور أعلاه يعمل، ولكن ياسمين-نود الوحدة في وضع الصيانة وتتضمن Jasmine 1.3، لذا احتفظ بها فقط للمشاريع القديمة. أما مشروع Node.js الجديد فيقوم بتثبيت الإصدار المُصان. واجهة سطر الأوامر جاسمين كاعتمادية تطويرية، ويتم استدعاؤها من خلال npx:

npm install --save-dev jasmine
npx jasmine init

ياسمين 6.x وهو الخط الرئيسي الحالي ويدعم Node.js 20 و 22 و 24، و Node.js 24 هو إصدار الدعم طويل الأمد النشط في عام 2026.

الخطوة 2) تهيئة بيئة الياسمين
تهيئة المشروع – عند القيام بذلك، يقوم Jasmine بإنشاء مجلد spec وملف json للتكوين. يُستخدم مجلد spec لتخزين جميع ملفات الاختبار الخاصة بك. وبذلك، سيعرف Jasmine مكان جميع اختباراتك، ومن ثم يمكنه تنفيذها وفقًا لذلك. JSON يُستخدم هذا الملف لتخزين معلومات التكوين الخاصة بـ Jasmine.

لتهيئة بيئة Jasmine، قم بتشغيل الأمر التالي

jasmine init

الخطوة 3) فحص ملف التكوين الخاص بك.
سيتم تخزين ملف التكوين في مجلد المواصفات/الدعم باسم jasmine.json. يقوم هذا الملف بتعداد الملفات المصدر وملفات المواصفات التي ترغب في تضمينها في برنامج Jasmine.

تُظهر لقطة الشاشة أدناه مثالاً نموذجياً لملف jasmine.json الخاص بـ Jasmine.

ملف تكوين Jasmine في مجلد دعم المواصفات يوضح دليل المواصفات وملفات المواصفات

  1. لاحظ أن دليل المواصفات محدد هنا. كما ذكرنا سابقًا، عند تشغيل jasmine، فإنه يبحث عن جميع الاختبارات في هذا الدليل.
  2. الشيء التالي الذي يجب ملاحظته هو المعلمة spec_files - يشير هذا إلى أنه مهما كانت ملفات الاختبار التي يتم إنشاؤها، فيجب إلحاقها بالكلمة الأساسية "المواصفات".

ملاحظة حول التكوين: في Jasmine 6.x، يقبل الملف نفسه أيضًا المساعدين، والتي يتم تحميلها مرة واحدة قبل كل مواصفة، و الحياة الفطرية كتلة تحتوي على خيارات مثل العشوائية وإيقاف SpecOnExpectationFailure. نمط spec_files الافتراضي هو **/*[sS]pec.?(m)jsويمكن تمرير ملف مختلف باستخدام –config أو ال مسار إعدادات الياسمين المتغير.

بعد ذلك، في هذا البرنامج التعليمي لإطار عمل Jasmine، سنتعلم كيفية استخدام Jasmine لاختبار تطبيقات Node.js.

كيفية استخدام Jasmine لاختبار تطبيقات Node.js

من أجل استخدام اختبار وحدة Jasmine لتطبيقات Node.js، يجب اتباع سلسلة من الخطوات.

في المثال التالي، سنُعرّف وحدةً برمجيةً تجمع عددين، وسنختبرها. ثم سنُعرّف ملفًا برمجيًا منفصلًا يحتوي على كود الاختبار، ونستخدم مكتبة Jasmine لاختبار دالة الجمع.

الخطوة 1) قم بتحديد الكود الذي نحتاج إلى اختباره. سنقوم بتعريف دالة ستقوم بإضافة رقمين وإرجاع النتيجة. سيتم كتابة هذا الكود في ملف يسمى "Add.js".

تُظهر لقطة الشاشة أدناه وحدة Add.js النهائية، ويتم تكرار نفس الكود كنص أسفلها.

وحدة Add.js التي تُصدّر دالة AddNumber التي تُعيد مجموع مُعاملين

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code تفسير

  1. يتم استخدام الكلمة الأساسية "exports" للتأكد من إمكانية الوصول فعليًا إلى الوظيفة المحددة في هذا الملف بواسطة ملفات أخرى.
  2. نقوم بعد ذلك بتعريف دالة تسمى "AddNumber". تم تعريف هذه الوظيفة لتأخذ معلمتين، a وb. تتم إضافة الوظيفة إلى الوحدة "الصادرات" لجعل الوظيفة كوظيفة عامة يمكن الوصول إليها بواسطة وحدات التطبيق الأخرى.
  3. نحن أخيرًا نجعل وظيفتنا تُرجع القيمة المضافة للمعلمات.

الخطوة 2) بعد ذلك، نحتاج إلى تعريف كود اختبار Jasmine الخاص بنا، والذي سيُستخدم لاختبار دالة "Add" في ملف Add.js. يجب وضع الكود أدناه في ملف يُسمى add-spec.js.

ملاحظاتيجب إضافة كلمة "spec" إلى ملف الاختبار حتى يتمكن برنامج Jasmine من اكتشافها.

تُظهر لقطة الشاشة أدناه نفس ملف المواصفات مفتوحًا في محرر نصوص.

ملف add-spec.js يحتوي على مجموعة وصف ومواصفات تقنية تؤكد أن AddNumber تُرجع 11

var app=require("../Add.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});

Code تفسير

  1. نحتاج أولاً إلى تضمين ملف Add.js الخاص بنا حتى نتمكن من اختبار وظيفة "AddNumber" في هذا الملف.
  2. نقوم الآن بإنشاء وحدة الاختبار الخاصة بنا. الجزء الأول من وحدة الاختبار هو وصف الطريقة التي تعطي اسمًا للاختبار الخاص بنا. في هذه الحالة، اسم اختبارنا هو "الإضافة".
  3. الجزء التالي هو تقديم وصف لاختبارنا باستخدام الطريقة "it".
  4. نستدعي الآن دالة AddNumber ونرسل إليها المعاملين 5 و6. سيتم تمرير هذه القيم إلى دالة AddNumber في ملف Add.js. ثم تُخزَّن القيمة المُعادة في متغير يُسمى value.
  5. الخطوة الأخيرة هي إجراء المقارنة أو الاختبار الفعلي. بما أننا نتوقع أن تكون القيمة المُعادة من دالة AddNumber هي 11، فإننا نُحدد ذلك باستخدام الدالة expect(value).toBe(القيمة المتوقعة).

الناتج

  1. من أجل إجراء الاختبار، يحتاج المرء إلى تشغيل الأمر ياسمين.
  2. تُظهر لقطة الشاشة أدناه أنه بعد تشغيل أمر Jasmine، سيكتشف وجود اختبار باسم add-spec.js ويُنفّذه وفقًا لذلك. وفي حال وجود أي أخطاء في الاختبار، سيتم عرضها.

مخرجات وحدة التحكم لأمر Jasmine التي تُبلغ عن اختبار add-spec الذي تم تنفيذه

يستخدم مثال الإضافة مُطابقًا واحدًا، ومع ذلك، توفر مكتبة Jasmine مجموعة كاملة من المُطابقات. يسرد الجدول أدناه المُطابقات التي تُغطي تقريبًا كل تأكيد ستكتبه.

أكثر أنواع الياسمين التي ستستخدمها

المطابق هو المقارنة التي تلي expect(). استخدم .not قبل أي مطابق لعكسه، كما في expect(value).not.toBe(11).

المنظر ما الذي يتحقق منه الاستخدام النموذجي
يكون التطابق التام، نفس المقارنة مثل === توقع أن تكون القيمة (11)
لتساوي المساواة العميقة بين الكائنات والمصفوفات expect(user).toEqual({id: 1})
يحتوي على العضوية داخل مصفوفة أو سلسلة نصية expect(files).toContain('add-spec.js')
سيتم تحديده القيمة ليست غير محددة توقع أن يكون (app.AddNumber).معرّفًا()
toThrow تُثير الدالة المُغلّفة خطأً توقع أن يتم طرح استثناء عند استدعاء الدالة callAdd.
تم استدعاؤه تم الاستعانة بجاسوس مرة واحدة على الأقل توقع أن يتم استدعاء دالة logger.write()

هناك عادتان تحافظان على وضوح الأخطاء. استخدم toBe فقط مع القيم الأولية والمراجع المتطابقة، لأن كائنين لهما نفس المحتوى لا يمكن مساواتهما أبدًا. استخدم toEqual مع البنى، وأضف toHaveBeenCalledWith عندما تكون الوسائط بنفس أهمية الاستدعاء نفسه.

الإعداد والتفكيك والجواسيس في ياسمين

تحتاج الأجنحة الحقيقية إلى حالة مشتركة ونسخ احتياطية للمتعاونين البطيئين. يوفر Jasmine كليهما دون أي حزمة إضافية.

  • قبل كل شيء وبعد كل شيء يتم تشغيلها قبل وبعد كل مواصفات داخل كتلة الوصف، وهو المكان الطبيعي لإعادة بناء التركيبات.
  • قبل كل شيء وبعد كل شيء قم بتشغيلها مرة واحدة للكتلة بأكملها، لذا احتفظ بها للأعمال المكلفة مثل فتح اتصال.
  • spyOn(object, 'method') يستبدل طريقة حقيقية بـ tracking double; أضف .and.returnValue() للتحكم في الإجابة.
  • jasmine.createSpy('name') يقوم بإنشاء نسخة مزدوجة مستقلة لدالة رد نداء ليس لها كائن لربطها به.
  • المواصفات غير المتزامنة قد يتم تعريفها على أنها غير متزامنة ويتم انتظارها، وقد تعيد وعدًا، أو قد تقبل رد نداء تم الانتهاء منه والذي يجب استدعاؤه مرة واحدة بالضبط.

تُعاد تهيئة أدوات التجسس بين الاختبارات، لذا لا تُسرّب مجموعة الاختبارات أي دالة وهمية إلى الاختبار التالي. هذا العزل هو ما يجعل الاختبار الفاشل يُشير إلى عيب واحد بدلاً من سلسلة من العيوب، وهو نفس المبدأ الموصوف في... وحدة التجارب الأساسيات.

ياسمين ضد موكا ضد جيست

يُعدّ نظام Jasmine أحد ثلاثة أنظمة سائدة Javaاختبار البرامج النصية، وعادةً ما يعتمد الاختيار على مقدار الأسلاك التي ترغب في امتلاكها.

البعد الياسمين موكا دعابة
التأكيدات بني في يُضاف عادةً شاي تشاي بني في
الجواسيس والسخرية بني في إضافة، عادةً سينون بني في
التنفيذ مسلسل مسلسل التوازي بين العمليات
لقطات لا لا نعم
بيت مشترك Angular، Node.js العادي مجموعات Node.js المرنة React ومجموعات الحزم الحديثة

اختيار موكا عندما ترغب في تجميع مجموعة التأكيدات والمحاكاة الخاصة بك، و دعابة عندما تكون عمليات التشغيل المتوازية والتغطية واللقطات أكثر أهمية من التحكم في التكوين، يظل برنامج Jasmine الخيار الأخف وزنًا والأكثر اكتمالًا، ولهذا السبب يبقى شائعًا في اختبار الأتمتة الأجنحة.

الأسئلة الشائعة

يقرأ برنامج Jasmine المسار spec_dir كبادئة، ثم كل نمط glob مدرج في spec_files، بحيث يتم تشغيل الملفات المطابقة فقط. يتم استبعاد المسارات التي تبدأ بعلامة تعجب، ويتم تحميل الملفات المساعدة مرة واحدة قبل المواصفات لتسجيل الإعداد المشترك.

قم بتعريف المواصفات على أنها غير متزامنة وانتظر الاستدعاء، أو أعد وعدًا، أو اقبل رد نداء مكتمل. دليل غير متزامن يحذر من أن عملية التنفيذ يجب أن تتم مرة واحدة بالضبط، وإلا فإن حالات الفشل ستقع على المواصفات الخاطئة.

مرر مسارًا أو نمطًا بعد اسم المُشغِّل، على سبيل المثال npx jasmine spec/appSpec.js. تقبل علامة –filter نمطًا مطابقًا لاسم الوصف، مما يحافظ على سرعة الحصول على النتائج أثناء العمل على مجموعة واحدة.

استخدم ياسمين-نود لا تزال الحزمة في وضع الصيانة، وتتضمن Jasmine 1.3، وتُدرج Node.js 10 و12 كإصدارات مُحدّثة. حزمة Jasmine الرسمية tracبدلاً من ذلك، يتم استخدام إطار العمل وإصدارات Node.js المدعومة.

إذا أضفت البادئة x إلى أي مواصفة، كما في xit أو xdescribe، فسيُبلغ Jasmine عنها بأنها معلقة. أما إذا أضفت البادئة f، كما في fit أو fdescribe، فسيتم تشغيل المواصفات المحددة فقط. احذف كلا البادئتين قبل الالتزام.

تقوم مساعدات الذكاء الاصطناعي بصياغة وصف الكتل والمطابقات والحالات الشاذة من وحدة نمطية موجودة في ثوانٍ، كما أنها تُشير إلى المجموعات التي تفشل بشكل متقطع. مع ذلك، لا تزال كل مواصفات مُولّدة بحاجة إلى مراجعة، لأن التأكيد الواثق على وجود سلوك خاطئ يُخفي العيب.

مساعد الطيار جيثب يُكمل البرنامج كتابة مواصفات البرنامج أثناء الكتابة، ويمكن لوضع الوكيل فتح طلب سحب لإصلاح المواصفات المعطوبة بعد إعادة هيكلتها. تعامل مع الفرق الناتج كمقترح، وشغّل مجموعة الاختبارات بنفسك.

لا تزال Angular تدعم مواصفات Jasmine، و بروtracتور كانت تستخدم Jasmine كإطار عمل افتراضي قبل أرشفته. الآن، تقوم الفرق بربط Jasmine مع Karma للمتصفحات، أو نقل تدفقات المتصفح إلى Cypress وكاتب مسرحي.

تلخيص هذه التدوينة بـ: