<p>فشل sinon عند استعادة خصائص stubbed في كائن النافذة في IE11</p>

تم إنشاؤها على ٢٢ أغسطس ٢٠١٨  ·  4تعليقات  ·  مصدر: sinonjs/sinon

صف الخلل
من الممكن إبطاء ، ولكن ليس لاستعادة بعض الخصائص في كائن النافذة في IE11 مما يتسبب في قيام sinon بإلقاء خطأ في النوع: TypeError: Cannot redefine non-configurable property '...'

لإعادة إنتاج
https://jsbin.com/qixexucasa/edit؟js ، وحدة التحكم ، الإخراج - قارن السلوك في IE11 وأي متصفح آخر.

"TypeError: Cannot redefine non-configurable property 'parent'
   at restore (https://unpkg.com/[email protected]/pkg/sinon.js:3253:13)
   at Global code (https://null.jsbin.com/runner:18:1)"

سلوك متوقع
في IE11 بعض خصائص كائن النافذة غير قابلة للتكوين ، ولكن لا يزال من الممكن إيقافها وهذا مفيد جدًا في الاختبارات. سيكون السلوك المتوقع أحد هؤلاء:

  1. يجب أن تتسبب sinon في خطأ في خطوة كعب الروتين (وليس في خطوة الاستعادة ()) بحيث يتعذر إيقاف هذه الخاصية ؛
  2. عند إيقاف خاصية sinon يجب عدم نسخ السمة الأصلية configurable ، فهل هناك أي سبب لذلك؟ في حالة وجود false sinon يخلق مشاكل لنفسه فقط ، لذلك لا يمكن استعادته. لذلك يجب أن يكون هذا السطر دائمًا true :
    https://github.com/sinonjs/sinon/blob/638e104d1e6ed9908c1b09bd33d2cba1aa8c217a/lib/sinon/default-behaviors.js#L251

سياق الكلام:

  • إصدار المكتبة: تتأثر جميع الإصدارات ، تم اختبارها في 4.4.6 و 6.1.5.

يُرجى تأكيد ما إذا كان هذا خطأ أو سلوكًا متوقعًا.

Bug Help wanted hacktoberfest pinned

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

أواجه نفس المشكلة ووجدت سببًا لذلك في سطر sinon / default-سلوكيات.js 258.

value: function value(fake, newVal) {
    var rootStub = fake.stub || fake;

    Object.defineProperty(rootStub.rootObj, rootStub.propName, {
        value: newVal,
        enumerable: true,
        configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
    });

    return fake;
}

لا أعرف لماذا يجب أن يتبع خيار الكائن الأصلي القابل للتكوين. أعتقد أنه يجب أن يكون صحيحًا دائمًا لأنه بعد أن يتم إبطاله ، يمكن استعادته أو إعادة كتابته (عادةً sinon.restore ()) بغض النظر عن خيار الكائن الأصلي.

مؤقتًا قمت بإصلاح هذه المشكلة عن طريق تغيير هذا الرمز دائمًا ما يعود صحيحًا.

ال 4 كومينتر

شكرا لك على الوصف التفصيلي للمشكلة.

هل سيؤدي اتباع الإستراتيجية الثانية إلى نجاح هذا الأمر في IE11؟ إذا كان الأمر كذلك ، سيكون هذا هو المفضل لدي.

هل أنت مستعد للمساهمة في طلب سحب لإجراء التغييرات اللازمة؟

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

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

أواجه نفس المشكلة ووجدت سببًا لذلك في سطر sinon / default-سلوكيات.js 258.

value: function value(fake, newVal) {
    var rootStub = fake.stub || fake;

    Object.defineProperty(rootStub.rootObj, rootStub.propName, {
        value: newVal,
        enumerable: true,
        configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
    });

    return fake;
}

لا أعرف لماذا يجب أن يتبع خيار الكائن الأصلي القابل للتكوين. أعتقد أنه يجب أن يكون صحيحًا دائمًا لأنه بعد أن يتم إبطاله ، يمكن استعادته أو إعادة كتابته (عادةً sinon.restore ()) بغض النظر عن خيار الكائن الأصلي.

مؤقتًا قمت بإصلاح هذه المشكلة عن طريق تغيير هذا الرمز دائمًا ما يعود صحيحًا.

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