2012-02-24 1 views
3

Я пытаюсь написать тесты для всех моих JS, а тесты (я использую Jasmine) запускаются локально в браузере. Из-за ограничений безопасности (?) SessionStorage не работает локально (просмотр файла: /// ... в браузере) в Firefox.Как работать с sessionStorage локально в FF (для тестирования)

Быстрый пример:

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

но этот макет не работает с индексатором из sessionStorage (window.sessionStorage[key] = value) Proxy построить mockup объект.

+0

Это прекрасно работает, спасибо! :) – phobia

+0

getItem должен возвращать NULL, когда значение отсутствует. Таким образом, это должно быть 'return items [key]? items [ключ]: null' – user1338062

Смежные вопросы