Descreva o bug
é possível fazer um stub, mas não restaurar algumas propriedades no objeto de janela no IE11, fazendo com que o sinon lance um erro de tipo: TypeError: Cannot redefine non-configurable property '...'
Reproduzir
https://jsbin.com/qixexucasa/edit?js , console, saída - compare o comportamento no IE11 e em qualquer outro navegador.
"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)"
Comportamento esperado
No IE11 certas propriedades do objeto window não são configuráveis, mas ainda é possível fazer stub e isso é bastante útil nos testes. O comportamento esperado seria um destes:
configurable
, há algum motivo para isso? No caso de false
value, o sinon apenas cria problemas para si mesmo, portanto não é possível restaurá-lo. Portanto, esta linha deve ser sempre true
:Contexto:
Confirme se é um bug ou um comportamento esperado.
Obrigado por sua descrição detalhada do problema.
A segunda estratégia realmente funcionaria no IE11? Nesse caso, essa seria minha preferência.
Você gostaria de contribuir com uma solicitação pull para fazer as alterações necessárias?
Este problema foi automaticamente marcado como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.
Este problema foi automaticamente marcado como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.
Estou tendo o mesmo problema e encontrei a causa disso na linha 258 sinon / default-behaviours.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;
}
Não sei por que deveria seguir a opção configurável do objeto original. Acho que tem que ser sempre verdadeiro porque depois de stubado, ele pode ser restaurado ou reescrito (normalmente sinon.restore ()) independentemente da opção do objeto original.
Corrigi temporariamente esse problema alterando o código que sempre retorna verdadeiro.
Comentários muito úteis
Estou tendo o mesmo problema e encontrei a causa disso na linha 258 sinon / default-behaviours.js.
Não sei por que deveria seguir a opção configurável do objeto original. Acho que tem que ser sempre verdadeiro porque depois de stubado, ele pode ser restaurado ou reescrito (normalmente sinon.restore ()) independentemente da opção do objeto original.
Corrigi temporariamente esse problema alterando o código que sempre retorna verdadeiro.