<p>sinon не работает при восстановлении заглушенных свойств в оконном объекте в IE11</p>

Созданный на 22 авг. 2018  ·  4Комментарии  ·  Источник: sinonjs/sinon

Опишите ошибку
можно заглушить, но не восстановить некоторые свойства объекта окна в IE11, в результате чего sinon выдаст ошибку типа: TypeError: Cannot redefine non-configurable property '...'

Воспроизводить
https://jsbin.com/qixexucasa/edit?js , console, output - сравните поведение в 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 должен выдать ошибку на шаге заглушки (не на шаге restore ()), что невозможно заглушить это свойство;
  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

Самый полезный комментарий

У меня такая же проблема, и я нашел ее в строке 258 sinon / default-behavior.js.

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 ()) независимо от опции исходного объекта.

Временно я исправил эту проблему, изменив этот код, всегда возвращая true.

Все 4 Комментарий

Спасибо за подробное описание проблемы.

Будет ли вторая стратегия работать в IE11? Если так, то это мое предпочтение.

Не могли бы вы внести пулреквест, чтобы внести необходимые изменения?

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.

У меня такая же проблема, и я нашел ее в строке 258 sinon / default-behavior.js.

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 ()) независимо от опции исходного объекта.

Временно я исправил эту проблему, изменив этот код, всегда возвращая true.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги