Ошибка типа: не удается установить свойство localStorage для #, которое имеет только средство получения

#javascript #local-storage #fetch-mock

#javascript #локальное хранилище #выборка-макет

Вопрос:

Я издеваюсь над localStorage в unitests, например

 function storageMock() {
    var storage = {};
    ....
}
  

и настройка localStorage, например

 window.localStorage = localStorageMock()
  

Он работал нормально, пока я не обновил узел до 10.15.1 .

Это выдает ошибку, которая TypeError: Cannot set property localStorage of #<Window> which has only a getter .

Есть идеи, как я могу издеваться над localStorage и установить его в window.localStorage .

P.S Я получаю ответы типа setItem и getItem на localStorage, есть ли какой-либо способ, которым я могу установить весь localStorage сразу.

Комментарии:

1. Я столкнулся с той же проблемой с 10.16.3. Все еще не решена. Есть какие-либо обновления вашего вопроса?

2. Я получил это после обновления до jsdom 16.4.0 и узла 14.13.0

Ответ №1:

Добавить

 Object.defineProperty(window, 'localStorage', {
  value: storageMock
});
  

Полный пример:

 const localStorageMock = (() => {
  let store = {};

  return {
    getItem(key) {
      return store[key] || null;
    },
    setItem(key, value) {
      store[key] = value.toString();
    },
    removeItem(key) {
      delete store[key];
    },
    clear() {
      store = {};
    }
  };
})();

Object.defineProperty(window, 'localStorage', {
  value: localStorageMock
});

window.localStorage.setItem("KEY", "INPUT")