当我尝试如下 mock 一个React组件的localStorage时,
spyOn(window.localStorage,'removeItem');
window.localStorage.removeItem("key1");
window.localStorage.removeItem("key2");
expect(window.localStorage.removeItem).toHaveBeenCalledWith("key1");
expect(window.localStorage.removeItem).toHaveBeenCalledWith("key2");
并将以下代码用于localStorage模拟
let localStorageMock = (function() {
var storage = {};
return {
setItem: function(key, value) {
storage[key] = value || '';
},
getItem: function(key) {
return storage[key] || null;
},
removeItem: function(key) {
delete storage[key];
},
get length() {
return Object.keys(storage).length;
},
key: function(i) {
var keys = Object.keys(storage);
return keys[i] || null;
}
};
})();
Object.defineProperty(window, 'localStorage', { value: localStorageMock });
最佳答案
我通过添加带有以下内容的安装环境脚本文件来完成用于 session 存储以进行商店测试的操作:Object.defineProperty(window, 'sessionStorage', { value: {}, writable: true });
然后,package.json文件如下所示:
"jest": {
"setupTestFrameworkScriptFile": "jest/jest-setupTestFrameworkScriptFile.js",
}
我实际上并没有说服您在最新版本的jest中需要此设置,但是自更早版本以来,我就一直使用此设置。
使用这种方法时,需要注意的一件事是它可以在测试之间保留数据,因此您需要在beforeEach中添加以下内容:
sessionStorage = {};