Sinon: كيف يمكننا تجاوز رفض إنشاء كائن خطأ جديد؟

تم إنشاؤها على ١ فبراير ٢٠١٨  ·  6تعليقات  ·  مصدر: sinonjs/sinon

https://github.com/sinonjs/sinon/blob/4310343393b16b92b56526ab4614da4eb2886efa/lib/sinon/default-behaviors.js#L176

أحتفظ ببعض التعليمات البرمجية التي ترفض السلاسل وهذا يؤدي إلى حدوث مشكلات أثناء الاختبار. ما تم اصطياده من بلوبيرد لا يتصرف بشكل صحيح.

bluebird.rejects('Something')
    .catch(e => e === 'Something' /* true */, () => console.log(typeof e) /*string*/)
    .catch(() => console.log('should not be here'));

ومع ذلك ، فإن استخدام sinon.stub().usingPromise('bluebird').rejects('Something'); ينتهي بإنشاء كائن خطأ باسم Something. غير متوقع على الإطلاق.

قبل أن يقول أحدهم إننا ندعم الوعود المحلية فقط ، فلنتحقق مما يفعلونه!

Promise.reject('Something')
     .catch(e => {
        console.log(e === 'Something'); // true
        console.log(typeof e); // string
    });

عفوًا ، لم ينشئوا فئة خطأ ، بل ألقوا فقط الاستثناء الذي تم إعطاؤه مثل رمية.

try { 
    throw 'Something'; 
} catch (e) { 
    console.log(e === 'Something');  // true
    console.log(typeof e); // string
}
Bug Help wanted pinned

التعليق الأكثر فائدة

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

const example = sinon.stub().rejects(something);

يجب أن تتصرف مثل

const example = () => Promise.reject(something);

حاليًا ، ليس هذا هو الحال إذا كان something سلسلة. أود أن أقول أن السلوك الحالي هو خطأ.

ال 6 كومينتر

قبل أن يقول أحدهم إننا ندعم الوعود المحلية فقط ، فلنتحقق مما يفعلونه!

هذه مغالطة بسيطة . أنت تعلم جيدًا أننا ندعم مكتبات الوعد ، كما تستخدمها في مثالك.

يدرك مشرفو Sinon تمامًا كيفية عمل وعود JavaScript ، بما في ذلك أن Promise.reject() سيمرر أي شيء تمرره إليه.

أنا أحافظ على بعض التعليمات البرمجية التي ترفض السلاسل

في رأيي ، فإن رفض الوعود بـ String بدلاً من Error هو فعلاً ضرر لمطور Future Developer ، الذي يتعين عليه تصحيح ما نكتبه اليوم. السلاسل ليست مفيدة جدًا في التصحيح ، لأنها لا تلتقط تتبعات المكدس. من ناحية أخرى ، يفعل Error . لذلك ، أعتقد أن السلوك rejects() مرغوب فيه ، لأن ذلك يجعل من السهل استخدام مصحح الأخطاء لاكتشاف الخطأ الذي حدث بسرعة.

يبدو أنك لا توافق ، لكن البيان الوحيد الذي قلته هو أن Sinon لا يلبي توقعاتك. إذا كنت تعتقد أنه يجب تغيير السلوك الافتراضي ، فيرجى نشر الحجج التي توضح السبب ، مع الأخذ في الاعتبار أن التغيير قد يؤثر على العديد من المستخدمين.

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

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.

أود أن أقول أنه قد تكون هناك آراء مختلفة حول ما إذا كان تتبع المكدس مفيدًا بالفعل في سيناريوهات معينة أم لا. في وضعي الخاص ، أنا في الواقع لا أهتم بتتبع المكدس ، فأنا أهتم فقط برسالة الخطأ ثم تمريرها في مكان آخر. لذلك قمت بكتابة رمز للتعامل مع أسباب رفض نوع String و Error. ومع ذلك ، نظرًا لأن sinon يقوم بالسلسلة -> خطأ الإكراه بالنسبة لي ، لا يمكنني اختبار فرع الكود الخاص بي الذي يتعامل مع السلاسل. على هذا النحو لا يمكنني الحصول على تغطية كاملة

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

const example = sinon.stub().rejects(something);

يجب أن تتصرف مثل

const example = () => Promise.reject(something);

حاليًا ، ليس هذا هو الحال إذا كان something سلسلة. أود أن أقول أن السلوك الحالي هو خطأ.

أنا موافق.

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات