描述错误
可以存根,但不能在 IE11 中恢复 window 对象中的某些属性,导致 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 中,window 对象的某些属性是不可配置的,但仍然可以存根它们,这在测试中非常有用。 可预期的行为将是其中之一:
configurable
属性时,有什么原因吗? 在false
值的情况下, sinon 只会为自己制造问题,因此无法恢复它。 所以这一行应该总是true
:语境:
请确认这是错误还是预期行为。
感谢您对问题的详细描述。
使用第二个策略真的可以在 IE11 中工作吗? 如果是这样,那将是我的偏好。
您是否愿意贡献拉取请求以进行必要的更改?
此问题已自动标记为过时,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。
此问题已自动标记为过时,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。
我遇到了同样的问题,我在 sinon/default-behaviors.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())。
我暂时通过更改该代码始终返回 true 来解决此问题。
最有用的评论
我遇到了同样的问题,我在 sinon/default-behaviors.js 第 258 行找到了原因。
我不知道为什么它应该遵循原始对象的可配置选项。 我认为它必须始终正确,因为在存根之后,无论原始对象的选项如何,它都可以恢复或重写(通常是 sinon.restore())。
我暂时通过更改该代码始终返回 true 来解决此问题。