<p>sinon schlägt beim Wiederherstellen von Stub-Eigenschaften im Fensterobjekt in IE11 fehl</p>

Erstellt am 22. Aug. 2018  ·  4Kommentare  ·  Quelle: sinonjs/sinon

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:

  1. sinon sollte im Stub-Schritt (nicht im Restore()-Schritt) einen Fehler ausgeben, dass es nicht möglich ist, diese Eigenschaft zu stubieren;
  2. Beim Stubbing der Eigenschaft sollte sinon nicht das ursprüngliche 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 :
    https://github.com/sinonjs/sinon/blob/638e104d1e6ed9908c1b09bd33d2cba1aa8c217a/lib/sinon/default-behaviors.js#L251

Kontext:

  • Bibliotheksversion: Alle Versionen sind betroffen, getestet in 4.4.6 & 6.1.5.

Bitte bestätigen Sie, ob es sich um einen Fehler oder ein erwartetes Verhalten handelt.

Bug Help wanted hacktoberfest pinned

Hilfreichster Kommentar

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.

Alle 4 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

OscarF picture OscarF  ·  4Kommentare

NathanHazout picture NathanHazout  ·  3Kommentare

stevenmusumeche picture stevenmusumeche  ·  3Kommentare

byohay picture byohay  ·  3Kommentare

ndhoule picture ndhoule  ·  4Kommentare