3

すべての JS のテストを作成しようとしていますが、テスト (私は Jasmine を使用しています) はブラウザーでローカルに実行されます。セキュリティ上の制約 (?) により、sessionStorage は Firefox でローカル (ブラウザで file:///... を表示) で動作しません。

簡単な例:

window.sessionStorage.setItem('foo', 'bar');

これにより、「エラー: 操作はサポートされていません」と表示されます。

独自のモック メソッドで window.sessionStorage をオーバーライドしようとしましたが、うまくいきませんでした。

現時点で唯一の解決策は、sessionStorage に関連するすべてのものを try/catch ブロック内に配置することです。

この問題を最もよく処理する方法について何か提案はありますか?

4

2 に答える 2

5

Object.definePropertyこれでうまくいくようです、あなたはそれを模擬的sessionStorageに使うことができます:

var mockup = function() {
  var table = {};
  return {
    getItem: function(key) {
      return table[key];
    },
    setItem: function(key, value) {
      table[key] = value.toString();
    },
    clear: function() {
      table = {};
    }
  };
}();
Object.defineProperty(window, 'sessionStorage', { value: mockup });
// should output "Object { getItem=function(), setItem=function(), clear=function()}"
console.log(window.sessionStorage);

しかし、このモックアップは( ) Proxyのインデクサーを使用してオブジェクトを構築することはできません。sessionStoragewindow.sessionStorage[key] = valuemockup

于 2012-02-24T09:54:34.007 に答える
0

次を使用すると、ローカルのモックが自動的に取得されます: http://nbubna.github.io/store/

于 2013-12-09T16:34:08.380 に答える