Опишите ошибку
можно заглушить, но не восстановить некоторые свойства объекта окна в 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 некоторые свойства оконного объекта не настраиваются, но их все еще можно заглушить, и это очень полезно в тестах. Ожидаемое поведение будет одним из следующих:
configurable
, есть ли для этого какая-то причина? В случае значения false
sinon просто создает проблемы для себя, поэтому восстановить его невозможно. Таким образом, эта строка всегда должна быть true
:Контекст:
Пожалуйста, подтвердите, является ли это ошибкой или ожидаемым поведением.
Спасибо за подробное описание проблемы.
Будет ли вторая стратегия работать в 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.
Самый полезный комментарий
У меня такая же проблема, и я нашел ее в строке 258 sinon / default-behavior.js.
Я не знаю, почему он должен следовать настраиваемому параметру исходного объекта. Я думаю, что это всегда должно быть правдой, потому что после того, как он заглушен, он может быть восстановлен или переписан (обычно sinon.restore ()) независимо от опции исходного объекта.
Временно я исправил эту проблему, изменив этот код, всегда возвращая true.