Chai



chai

أساليب التأكيد

يقدم لك هذا الجزء من الدليل ثلاثة أنماط توكيد مختلفة قد تستخدمها في بيئة الاختبار الخاصة بك. بمجرد الانتهاء من اختيارك ، يوصى بالنظر في وثائق واجهة برمجة التطبيقات (API) الخاصة بنمطك المحدد.

يجزم

Assert

يتم كشف نمط assert خلال واجهة assert . يوفر هذا تدوينًا كلاسيكيًا للتأكيد ، مشابهًا لتلك المعلمة مع node.js. ومع ذلك ، يوفر هذا الوحدة النمطية العديد من الاختبارات الإضافية ومتوافق مع المتصفح.

  var assert = تتطلب ("chai")
   ، foo = 'bar'
   والمشروبات = {tea: ['chai'، 'matcha'، 'oolong']}؛

 assert.typeOf (foo، 'string')؛  // بدون رسالة اختيارية
 assert.typeOf (foo، 'string'، 'foo is a string')؛  // مع رسالة اختيارية
 assert.equal (foo، 'bar'، 'foo equal ‘bar`')؛
 assert.lengthOf (foo، 3، 'foo`s has length of 3')؛
 assert.lengthOf (drinks.tea، 3، 'drinks has 3 types of tea')؛

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

BDD

عرض واجهة برمجة تطبيقات BDD كاملة

نمط BDD يأتي بنكوتين: expect should . كلاهما يستخدم نفس اللغة المتسلسلة لبناء تأكيدات ، لكنهما يختلفان في الطريقة التي يتم بها بناء التأكيد في البداية. في حالة should ، هناك أيضًا بعض التحذيرات وأدوات إضافية للتغلب على التحذيرات.

توقع

نمط BDD مكشوف من خلال expect أو should يتفاعل. في كلتا السيناريوهين ، تقوم بتجميع تأكيدات اللغة الطبيعية.

  var يتوقع = تتطلب ('chai')
   ، foo = 'bar'
   والمشروبات = {tea: ['chai'، 'matcha'، 'oolong']}؛

 نتوقع (فو) .to.be.a ( 'سلسلة')؛
 نتوقع (فو) .to.equal ( 'بار')؛
 نتوقع (فو) .to.have.lengthOf (3)؛
 نتوقع (المشروبات) .to.have.property ( 'الشاي') with.lengthOf (3)؛

كما يسمح لك أيضًا بتضمين الرسائل العشوائية للإحاطة مسبقًا بأي تأكيدات فاشلة قد تحدث.

  var answer = 43؛

 // AssertionError: المتوقع 43 إلى يساوي 42.
 نتوقع (الجواب) .to.equal (42)؛

 // AssertionError: topic [answer]: average 43 to equal 42.
 نتوقع (إجابة ، "موضوع [إجابة]"). to.equal (42)؛

يأتي هذا في متناول اليد عند استخدامه مع مواضيع غير وصفية مثل booleans أو الأرقام.

ينبغي

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

  var should should require ("chai '). should () // فعليًا استدعاء الدالة
   ، foo = 'bar'
   والمشروبات = {tea: ['chai'، 'matcha'، 'oolong']}؛

 foo.should.be.a ( 'سلسلة')؛
 foo.should.equal ( 'بار')؛
 foo.should.have.lengthOf (3)؛
 beverages.should.have.property ( 'الشاي') with.lengthOf (3)؛

اختلافات

أولاً وقبل كل شيء ، لاحظ أن expect يتطلب مجرد إشارة إلى الدالة المتوقعة ، بينما يتطلب الأمر تنفيذ الوظيفة.

  var chai = تتطلب ("chai")
   ، ونتوقع = chai.expect
   يجب أن = chai.should ()؛

توفر واجهة expect وظيفة كنقطة بداية لربط تأكيدات اللغة الخاصة بك. يعمل على node.js وفي جميع المتصفحات.

واجهة should تمديد Object . prototype Object . prototype لتوفير طبقة واحدة لتكون نقطة البداية لتأكيدات لغتك. يعمل على node.js وفي جميع المتصفحات الحديثة باستثناء Internet Explorer.

يجب الاضافات

وبالنظر إلى أن يعمل من خلال توسيع Object . prototype Object . prototype ، هناك بعض السيناريوهات التي should لا تعمل. أساسا ، إذا كنت تحاول التحقق من وجود كائن. خذ pseudocode التالية:

  db.get (1234، function (err، doc) {
   // نتوقع خطأ غير موجود
   // نتوقع وثيقة لتكون كائن
 })؛

بالنظر إلى أن err يجب أن يكون خاليًا أو غير محدد ، err . should . not . exist err . should . not . exist err . should . not . exist ليس بيانًا صالحًا نظرًا لأنه لم يتم تمديد أو undefined صالح مع بداية سلسلة بداية. على هذا النحو ، فإن التأكيدات القليلة المناسبة لهذا السيناريو هي كما يلي:

  var should should require ('chai'). should ()؛
 db.get (1234، function (err، doc) {
   should.not.exist (يخطئ)؛
   should.exist (الوثيقة)؛
   doc.should.be.an ( 'الكائن')؛
 })؛

بشرط أن تقوم بتعيينها إلى var ، يمكنك الوصول إلى العديد من المساعدين السريعة لإبعادك عن المشاكل عند استخدامك.

  • should . exist
  • should . not . exist
  • should . equal
  • should . not . equal
  • should . Throw
  • should . not . Throw

باستخدام ينبغي في ES2015

ليس من الممكن إجراء سلسلة من المكالمات الوظيفية من بيان import ES2015 - يجب أن يستمر الأمر على الخط الخاص به ، والذي يبدو مطولًا قليلاً:

  استيراد تشاي من "تشاي" ؛
 chai.should ()؛

للحصول على مظهر أنظف ، يمكنك القيام بذلك بدلاً من ذلك:

  استيراد "chai / should" ؛

ترتيب

config.includeStack

  • param {Boolean}
  • @ افتراضية false

الخاصية القابلة للتكوين من قبل المستخدم ، تؤثر على ما إذا كان يتم تضمين تتبع المكدس في رسالة الخطأ Assertion. يعمل الإعداد الافتراضي ل false تعطيل تتبع المكدس في رسالة الخطأ.

  chai.config.includeStack = true؛  // قم بتشغيل تتبع المكدس

config.showDiff

  • param {Boolean}
  • default true

الخاصية القابلة للتكوين المستخدم ، يؤثر أم لا يجب تضمين العلامة showDiff في AssertionErrors thrown. false دائما تكون false ؛ سوف يكون صحيحا صحيحا عندما طلب التأكيد أن يظهر الفرق.

  chai.config.showDiff = false؛  // إيقاف عرض الفرق المراسل

config.truncateThreshold

  • param {Number}
  • default 40

الخاصية القابلة للتكوين من قبل المستخدم ، تحدد حد الطول للقيم الفعلية والمتوقعة في أخطاء التوكيد. إذا تم تجاوز هذا الحد ، يتم اقتطاع القيمة.

قم بتعيينه إلى صفر إذا كنت ترغب في تعطيل مقطوعة تمامًا.

  chai.config.truncateThreshold = 0؛  // تعطيل اقتطاع