バグの説明
スタブは可能ですが、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
必要があります。環境:
バグなのか、予想通りの動作なのか確認してください。
問題について詳しく説明していただきありがとうございます。
2 番目の戦略を実行すると、実際に 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 である必要があると思います。
コードが常に true を返すように変更することで、一時的にこの問題を修正しました。
最も参考になるコメント
私は同じ問題を抱えていて、sinon/default-behaviors.js 行 258 でその原因を見つけました。
元のオブジェクトの構成可能なオプションに従う必要がある理由がわかりません。 スタブした後は、元のオブジェクトのオプションに関係なく、復元または書き換え (通常は sinon.restore()) できるため、常に true である必要があると思います。
コードが常に true を返すように変更することで、一時的にこの問題を修正しました。