Sinon: أسماء الجواسيس

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

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

Help wanted

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

أنا أرى هذا. تظهر دائمًا أن الاسم هو proxy - ولكن إذا كان i Object.defineProperty(spy, 'name', { value: 'new name' }) فإنه يُبلغ عن "الاسم الجديد".

سيكون من الرائع إعادة فتح هذا.

ال 13 كومينتر

يفحص Sinon اسم الوظيفة المغلفة. لذلك يمكنك تسمية الجاسوس عن طريق تغليف دالة مسماة فارغة.

var spy = sinon.spy(function doStuff() {});

تتيح لك هذه التقنية أيضًا إنتاج دالة بطول محدد:

var spy = sinon.spy(function doStuff(a, b, c) {}); // spy.length === 3

بقدر ما أستطيع أن أرى ، هو دائما "وكيل" كاسم وظيفة. هل أنت متأكد من صحة هذا التعليق؟

بقدر ما أستطيع أن أرى ، هو دائما "وكيل" كاسم وظيفة. هل أنت متأكد من صحة هذا التعليق؟

هل تمانع في نشر مثال قابل للتشغيل؟

// test/index.js
var sinon = require('sinon');

var spy = sinon.spy(function doStuff() {
    console.log('Name: ' + spy.name);
});

spy();
➜  sinon-test node test/index.js 
Name: proxy

لا أستطيع أن أتذكر ما فعلته من قبل ، لكنني كنت أحصل على إخراج Mocha من فشل الاختبارات حيث كان اسم الوظيفة "proxy" ولن تعرف أنه "doStuff". إذا استطعت أن أتذكر ما كان عليه بالضبط ، فسوف أنشره

أنا أرى هذا. تظهر دائمًا أن الاسم هو proxy - ولكن إذا كان i Object.defineProperty(spy, 'name', { value: 'new name' }) فإنه يُبلغ عن "الاسم الجديد".

سيكون من الرائع إعادة فتح هذا.

لقد تمكنت من التغلب على هذا من خلال ما يلي:

const mapMethod = sinon.spy(Array.prototype, 'map');
const methodName = map.wrappedMethod.name;
console.log(methodName); // 'map'

Tbhesswebber الذي لا يعمل عندما يعتمد الكود غير التجريبي على اسم الوظيفة.

آه ... نقطة ممتازة. أنا أعمل على مناهج لتدريس وظائف عالية المستوى (باستخدام Array.prototype كنقطة انطلاق) ، وهو ما يقودني إلى هذه المشكلة. حالة استخدام مختلفة جدًا!

ملاحظة - يعد اختبار تفاصيل التنفيذ أمرًا شاقًا حقًا عندما تحاول فعلاً ذلك!

أستطيع أن أرى كيف سيكون هذا مفيدًا. إذا أراد أي شخص التعمق في هذا الأمر ، فسيكون ذلك رائعًا.

قد يكون هناك ميزات أو اختبارات تعتمد على اسم الوظيفة التي تم إرجاعها. إذا كان الأمر كذلك ، فيجب أن نناقش كيفية الالتفاف عليه.

mroderick عند إنشاء جاسوس باستخدام نسخة أصلية ، Object.defineProperty(spy, 'name', { configurable: true, value: spy.wrappedMethod.name }) هل يجب أن يفعل ذلك؟

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

لقد أدركت للتو أن لدينا أيضًا spy.named(name) في واجهة برمجة التطبيقات (API) فهي تعين خاصية displayName على الجاسوس. يجب أيضًا تغيير اسم الوظائف ، على ما أعتقد. إلقاء نظرة على هذا الآن.

تم إصدار التصحيح من # 1987 في v7.2.7 . واسمحوا لنا أن نعرف ما إذا كان هذا مرضي للجميع

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

القضايا ذات الصلة

zimtsui picture zimtsui  ·  3تعليقات

byohay picture byohay  ·  3تعليقات

stevenmusumeche picture stevenmusumeche  ·  3تعليقات

stephanwlee picture stephanwlee  ·  3تعليقات

OscarF picture OscarF  ·  4تعليقات