2012-02-24 47 views
3

我想爲我所有的JS編寫測試,並且測試(我使用Jasmine)在瀏覽器中本地運行。由於安全限制(?)sessionStorage在Firefox中不能在本地工作(在瀏覽器中查看文件:/// ...)。如何在FF中處理sessionStorage(用於測試)

簡單的例子:

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

這給了 「錯誤:操作不支持」。

我嘗試用我自己的模擬方法重寫window.sessionStorage,但沒有運氣。

我現在唯一的解決方案是將與sessionStorage相關的所有內容放在try/catch塊中。

有關如何最好地處理此問題的任何建議?

回答

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); 

但這樣機不符合的sessionStoragewindow.sessionStorage[key] = valueProxy索引打造mockup對象工作。

+0

完美的作品,謝謝! :) – phobia 2012-02-24 15:12:12

+0

當值不存在時,getItem應該返回NULL。所以它應該是'返回物品[鑰匙]?項目[關鍵]:null' – user1338062 2015-05-06 09:20:38

相關問題