Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法设置#<;的属性localStorage;窗口>;它只有一个getter_Javascript_Local Storage_Fetch Mock - Fatal编程技术网

Javascript TypeError:无法设置#<;的属性localStorage;窗口>;它只有一个getter

Javascript TypeError:无法设置#<;的属性localStorage;窗口>;它只有一个getter,javascript,local-storage,fetch-mock,Javascript,Local Storage,Fetch Mock,我在模仿Unitest中的localStorage,比如 function storageMock() { var storage = {}; .... } 并将本地存储设置为 window.localStorage = localStorageMock() 它工作正常,直到我将节点更新为10.15.1 抛出的错误是TypeError:无法设置#的属性localStorage,它只有一个getter 知道我如何模拟localStorage并将其设置为window.localS

我在模仿Unitest中的localStorage,比如

function storageMock() {
    var storage = {};
    ....
}
并将本地存储设置为

window.localStorage = localStorageMock()
它工作正常,直到我将节点更新为
10.15.1

抛出的错误是
TypeError:无法设置#的属性localStorage,它只有一个getter

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

另外,我在localStorage上得到了类似于
setItem
getItem
的答案,有没有办法一次设置整个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")

我在10.16.3中遇到了同样的问题。仍然没有解决。您的问题有什么更新吗?我是在升级到JSDOM16.4.0和Node14.13.0之后得到的