هل طلب الميزة الخاص بك متعلق بمشكلة؟
قراءة ما يمكن وما لا يستطيع المزيف فعله ليس واضحًا من الوثائق.
صِف الحل الذي تريده
يجب توثيق الطرق الدقيقة المتاحة لـ Fake.
بادئ ذي بدء ، شكرًا لك على Sinon ، أعتقد أن المكتبة قوية وقد ساعدتني في كتابة الكثير من الاختبارات. ما أطلبه هنا هو أن المنتجات المقلدة بحاجة إلى تحسين وثائقها. هذا مثال لشيء كافحت معه.
تقول الجملة الأولى من التوثيق المزيف:
تم تقديم وهمية مع Sinon مع الإصدار الخامس. إنه يبسط ويدمج المفاهيم من الجواسيس والبذرات.
تم تعريف كلمة "يدمج" هنا بشكل فضفاض للغاية لمعرفة ما ينتهي به المطاف إلى أن تكون واجهة برمجة التطبيقات المزيفة. استنتاجي هو أن المنتجات المقلدة تبدو وكأنها تشترك في واجهة برمجة تطبيقات مع الجواسيس مع بعض السلوك الإضافي المشابه للعذراء. لقد توصلت إلى هذا الاستنتاج لأنه يبدو أن الكائن المزيف له خاصية called
كما يفعل الجاسوس (لا يمكن العثور على هذا الموثق في أي مكان باستثناء وثائق الجواسيس) ، و withArgs
الذي يتوفر عادة لبذرة ولكن لا يبدو متاحًا للمزيفة.
تحتاج المنتجات المقلدة بالتأكيد إلى مستندات أفضل. ربما هناك شيء يجب معالجته في هاكاثون أكتوبر المقترح (ما زال مترددًا ،mroderick؟)؟
@ fatso83 أود أن
هل أقوم بتحديث الملف https://github.com/sinonjs/sinon/blob/master/docs/release-source/release/fakes.md ؟
كما أن نطاق هذه المشكلة هو تحديد الوظائف المتاحة على كائن وهمي ، ربما ربط بالتجسس ووثيقة كعب روتين؟
@ peterjgrainger هذا عظيم! يبدو النطاق وهذا النهج معقولين ...
عند النظر إلى التزييفات البرمجية ، يبدو أن لها نفس واجهة برمجة التطبيقات مثل جاسوس ولا شيء من Stub.
اقتراح تحديث المستندات لإزالة الإشارة إلى بذرة لأنها مضللة قليلاً وإضافة أن واجهة برمجة التطبيقات للتزييف هي نفسها الجاسوس
صرخ 😮 إذا كان هذا لا يبدو صحيحًا.
peterjgrainger شكرا للنظر في هذا. يمكنني رؤية أوجه التشابه بين spy
، و stub
eg fakes.throws()
هو نفسه stub().throws()
@ mshaaban0 شكرا على المدخلات. سألقي نظرة فاحصة
@ fatso83 @ mshaaban0 أعتقد أنني أسأت فهم النطاق.
اعتقدت أن هذه التذكرة تغطي توثيق الوظيفة المزيفة على سبيل المثال
var fake = sinon.fake();
ليس مباشرة على المزيف نفسه أي
sinon.fake
مما يمكنني رؤيته sinon.fake()
إرجاع spy
أعتقد أن هذا الجزء من التوثيق يحتاج إلى توضيح حيث أن المراسل يطلب توثيق الكائن بدلاً من الوظائف الثابتة.
لقد توصلت إلى هذا الاستنتاج لأنه يبدو أن الكائن المزيف له خاصية
called
كما يفعل الجاسوس (لا يمكن العثور على هذا الموثق في أي مكان باستثناء وثائق الجواسيس)
يبدو أن itmayziii يشير إلى sinon.fake()
بدلاً من sinon.fake
أعتقد أنني أفهم ماذا أفعل الآن. قم بتعديل الوثائق الحالية لتقول أي الوظائف الثابتة مستوحاة من جاسوس وأيها مستوحاة من كعب وتغيير الصياغة merged
لوصف مزيج الأساليب بشكل أفضل بالإضافة إلى محاولة اكتشاف كيفية التمييز بين sinon.fake
و sinon.fake()
أنت لست الوحيد الذي يسيء فهم النطاق. سعيد لأنك أوضحتها لنا 😄
تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.
أعتقد أنني أفهم ماذا أفعل الآن. قم بتعديل الوثائق الحالية لتقول أي الوظائف الثابتة مستوحاة من جاسوس وأيها مستوحاة من كعب وتغيير الصياغة المدمجة لوصف مزيج الأساليب بشكل أفضل بالإضافة إلى محاولة اكتشاف كيفية التمييز بين sinon.fake و sinon.fake ( )
ما المطلوب فعله في هذه القضية؟ إذا أوضح شخص ما الأمر ، أود تقديم مساهمة.
نظرًا لوجود قسم يسمى Instance properties
، أعتقد أن هناك حاجة لشرح طرق الوظيفة الزائفة فقط. إذا لم تكن هناك طرق أخرى لوظيفة مزيفة بخلاف أساليب التجسس ، أعتقد أنه لا يوجد سبب لإعادة تشكيل المستندات الحالية.
شكرا 😊
srknzl TBH ، لا أتذكر كل ذلك جيدًا ، لكن هذه بعض النقاط التي قد تحتاج إلى تحسين:
sinon.fake
callCount
وإحصائيات أخرى) 3. مثيل مزيف به واجهة برمجة تطبيقات لجاسوس (_ is a_ Fake a Spy،mroderick؟)تعد Fakes API بديلاً عن Stubs and Spies API التي يمكنها استبدال جميع هذه الاستخدامات بالكامل
في حين أن هذا صحيح ، أعتقد أن استخدام جاسوس بدلاً من مكالمة استبدال + وهمية أسهل. هل هناك أي شيء يمكن القيام به حيال ذلك؟
const foo = {bar: () => {}};
const aSpy = sinon.spy(foo, 'bar');
foo.bar();
console.log(aSpy.called); // true
ضد
const foo = {bar: () => {}};
const barFake = sinon.fake(foo.bar);
sinon.replace(foo, 'bar', barFake);
foo.bar();
console.log(barFake.called); // true
إذا كان الأمر سهلاً مثل الجواسيس ، فستكون المنتجات المقلدة هي الوحيدة التي سأستخدمها.
يحرر:
اكتشفت أنه يمكنني القيام بذلك:
const foo = {bar: () => {}};
sinon.replace(foo, 'bar', sinon.fake(foo.bar));
foo.bar();
console.log(foo.bar.called); // true
قد يستحق توثيق هذا الاستخدام أيضًا.
srknzl لست متأكدًا مما إذا كانت مكالمة الاستبدال تعيد أي شيء ، ولكن من المحتمل أن تعيد المزيف. هذا سيجعلها أكثر سلاسة.
تم التحقق للتو:
f = sinon.fake();
val=sinon.replace(o, 'b', f)
assert.equal(f,val);
مما يعني أنه يمكنك كتابة هذا:
const foo = {bar: () => {}};
const fake = sinon.replace(foo, 'bar', sinon.fake());
foo.bar();
console.log(fake.calledOnce); // true
نعم ، من المنطقي. كما أن استبدال () لا يذكر قيمة الإرجاع الخاصة به على صفحة آلية تحديد الصلاحيات
فقط وضح الأمر ، ما هي الإصدارات التي يجب تغييرها؟ كل الإصدارات التي لديها مزيفة ، أليس كذلك؟ أو مجرد الإصدار التالي؟
ملاحظات أخرى حول التوثيق بشكل عام:
يمكنني أن أفهم أن الروابط الخضراء عبارة عن روابط ، لكن بعض الروابط غير الخضراء هي أيضًا روابط ، مثل sinon.replace*
و sinon.spy
و sinon.stub
. سيكون من الأفضل جعلها مختلفة بطريقة ما
العلاقات العامة الأولية موجودة على https://github.com/sinonjs/sinon/pull/2360 ، والعمل قيد التقدم.
أنا في انتظار ردك.