javascript - 类型错误 : Cannot set property localStorage of#<Window> which has only a getter

标签 javascript local-storage fetch-mock

我在像这样的 unitests 中 mock localStorage

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

并设置 localStorage 之类的
window.localStorage = localStorageMock()

它工作正常,直到我将 Node 更新为 10.15.1 .
TypeError: Cannot set property localStorage of #<Window> which has only a getter 是抛出错误.

关于如何模拟 localStorage 并将其设置为 window.localStorage 的任何想法。

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

最佳答案

添加

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

关于javascript - 类型错误 : Cannot set property localStorage of#<Window> which has only a getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55606853/

相关文章:

javascript - 将文件从 localStorage 发布到 PHP $_FILES

unit-testing - 如何使用有效负载获取模拟发布请求

javascript - 如何将 jQuery 数据变量放入按钮而不是 div 中

javascript - 正则表达式 -/\w\b\w/

javascript - 我如何找出 IndexedDB 中可用的数据库?

javascript - 将对象数组保存到 javascript localStorage 不起作用

javascript - 无法打开购物车对话框 - Material 对话框 - Angular2+

javascript - 使用javascript在两个html页面之间传递消息

javascript - 使用 Fetch-Mock 返回测试 Blob