类型错误:无法设置只有 getter 的 #<Window> 属性 localStorage

Tas*_*waz 5 javascript local-storage fetch-mock

我在像这样的unitests中嘲笑localStorage

function storageMock() {
    var storage = {};
    ....
}
Run Code Online (Sandbox Code Playgroud)

并设置 localStorage 像

window.localStorage = localStorageMock()
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到我将 Node 更新为10.15.1.

这是抛出错误TypeError: Cannot set property localStorage of #<Window> which has only a getter

知道如何模拟 localStorage 并将其设置为 window.localStorage 。

PS 我在 localStorage 上得到了类似的答案setItemgetItem有什么方法可以一次性设置整个 localStorage 吗?

小智 7

添加

Object.defineProperty(window, 'localStorage', {
  value: storageMock
});
Run Code Online (Sandbox Code Playgroud)

完整示例:

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")
Run Code Online (Sandbox Code Playgroud)