أحاول اختبار وحدة في ملف أثناء إيقاف وظيفة أخرى في ملف SAME ، ولكن لا يتم تطبيق mock ويتم استدعاء الطريقة الحقيقية. هذا مثال:
// file: 'foo.js'
export function a() {
// .....
}
export function b() {
let stuff = a(); // call a
// ...do stuff
}
واختباري:
import * as actions from 'foo';
const aStub = sinon.stub(actions, 'a').returns('mocked return');
actions.b(); // b() is executed, which calls a() instead of the expected aStub()
فكر كيف سيبدو هذا في المعيار ES5. يتم تصدير كل دالة باسم معين في كائن الصادرات ، ولكنها أيضًا قابلة للإشارة داخليًا باستخدام اسم الوظيفة. نحن نتحدث عن مرجعين مختلفين. عند stubbing أنت تقوم بتغيير المرجع الخارجي. يتم الاحتفاظ بالمرجع الداخلي كما هو. لا يمكنك تغييره ، إلا إذا قمت بإنشاء حاقن تبعية صريح (مثل وظيفة الضبط للاستخدام الداخلي). هذا ليس خطأ ، ولكنه سمة من سمات JavaScript.
هل هناك أي حل بديل حول هذا ؟؟؟ من الشائع جدًا الدخول في هذا النوع من المشكلات عند اختبار ملف nodejs.
هذا مغطى في وثائقنا ، في قسم الكيفية:
http://sinonjs.org/how-to/link-seams-commonjs/