Beschreibe den Fehler
Es ist möglich, einige Eigenschaften im Fensterobjekt in IE11 zu stubieren, aber nicht wiederherzustellen, was dazu führt, dass Sinon einen Typfehler ausgibt: TypeError: Cannot redefine non-configurable property '...'
Fortpflanzen
https://jsbin.com/qixexucasa/edit?js ,console,output – Vergleichen Sie das Verhalten in IE11 und jedem anderen Browser.
"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)"
Erwartetes Verhalten
In IE11 sind bestimmte Eigenschaften von Fensterobjekten nicht konfigurierbar, aber es ist immer noch möglich, sie zu stubieren, was in den Tests sehr nützlich ist. Das zu erwartende Verhalten wäre eines der folgenden:
configurable
Attribut kopieren, gibt es dafür einen Grund? Im Fall von false
sinon nur Probleme für sich selbst, so dass es nicht möglich ist, es wiederherzustellen. Diese Zeile sollte also immer true
:Kontext:
Bitte bestätigen Sie, ob es sich um einen Fehler oder ein erwartetes Verhalten handelt.
Vielen Dank für Ihre ausführliche Beschreibung des Problems.
Würde dies mit der zweiten Strategie in IE11 tatsächlich funktionieren? Wenn ja, wäre das meine Präferenz.
Wären Sie bereit, einen Pull-Request beizutragen, um die notwendigen Änderungen vorzunehmen?
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
Ich habe das gleiche Problem und habe die Ursache in sinon/default-behaviors.js Zeile 258 gefunden.
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;
}
Ich weiß nicht, warum es der konfigurierbaren Option des ursprünglichen Objekts folgen sollte. Ich denke, es muss immer wahr sein, denn nachdem es gestubt wurde, kann es unabhängig von der Option des ursprünglichen Objekts wiederhergestellt oder neu geschrieben werden (normalerweise sinon.restore()).
Vorübergehend habe ich dieses Problem behoben, indem ich geändert habe, dass der Code immer true zurückgibt.
Hilfreichster Kommentar
Ich habe das gleiche Problem und habe die Ursache in sinon/default-behaviors.js Zeile 258 gefunden.
Ich weiß nicht, warum es der konfigurierbaren Option des ursprünglichen Objekts folgen sollte. Ich denke, es muss immer wahr sein, denn nachdem es gestubt wurde, kann es unabhängig von der Option des ursprünglichen Objekts wiederhergestellt oder neu geschrieben werden (normalerweise sinon.restore()).
Vorübergehend habe ich dieses Problem behoben, indem ich geändert habe, dass der Code immer true zurückgibt.