我正在尝试为以下函数编写一个jest测试,它设置了sessionStorage条目:
/**
* @desc create authenticated user session
* @param {String} [email='']
* @param {Date} [expires=Date.now()]
* @param {String} [hash='']
* @param {Array} users
* @return {Session}
*/
export const setSession = (
email = '',
expires = Date.now(),
hash = '',
users: []) => {
const session = {
email,
expires,
hash,
users
};
sessionStorage.setItem('MY_SESSION', JSON.stringify(session));
};
我很困惑,从哪里开始,即我得到了jest错误,说会话存储没有在像这样的简单测试中定义:
it('takes in session parameters and returns sessionStorage', () => {
console.log(setSession('test@me.io', Date.now(), 'ha_sh', []));
});
答案 0 :(得分:1)
您必须在单元测试中模拟会话存储才能调用它。
一种方法是:
var myStorage = function() {
var sessionStorage = {};
return {
getItem: function(key) {
return sessionStorage[key];
},
setItem: function(key, value) {
sessionStorage[key] = value.toString();
},
clear: function() {
sessionStorage = {};
}
};
};
Object.defineProperty(window, 'sessionStorage', { value: myStorage });