如何在FF本地处理sessionStorage(用于测试)

pho*_*bia 3 javascript jasmine sessionstorage

我正在尝试为我的所有JS编写测试,并且测试(我使用的是Jasmine)在浏览器中本地运行.由于安全限制(?)sessionStorage在Firefox中无法在本地工作(在浏览器中查看文件:/// ...).

快速举例:

window.sessionStorage.setItem('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)

这给出了"错误:不支持操作".

我尝试使用自己的模拟方法覆盖window.sessionStorage,但没有运气.

我目前唯一的解决方案是将与sessionStorage相关的所有内容放在try/catch块中.

有关如何最好地处理此问题的任何建议?

ota*_*tay 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);
Run Code Online (Sandbox Code Playgroud)

但这个样机不与工作索引sessionStorage(window.sessionStorage[key] = value)代理mockup对象.