【问题标题】:TypeError: Cannot set property localStorage of #<Window> which has only a getterTypeError:无法设置只有 getter 的 #<Window> 的属性 localStorage
【发布时间】:2019-04-10 07:20:42
【问题描述】:

我在像这样的单元中嘲笑 localStorage

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

并设置 localStorage 之类的

window.localStorage = localStorageMock()

它运行良好,直到我将 Node 更新为 10.15.1

TypeError: Cannot set property localStorage of #&lt;Window&gt; which has only a getter 抛出错误。

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

P.S 我在 localStorage 上得到了像 setItemgetItem 这样的答案,有什么方法可以一次设置整个 localStorage。

【问题讨论】:

  • 我在 10.16.3 中遇到了同样的问题。还是没有解决。你的问题有什么更新吗?
  • 我在升级到 jsdom 16.4.0 和节点 14.13.0 后得到了这个

标签: javascript local-storage fetch-mock


【解决方案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")

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多