开玩笑地检查函数 returns sessionStorage 是否

Check if function returns sessionStorage with 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));
};

我对从哪里开始感到困惑,即我收到开玩笑的错误,说会话存储没有在像这样的简单测试中定义:

it('takes in session parameters and returns sessionStorage', () => {
  console.log(setSession('test@me.io', Date.now(), 'ha_sh', []));
});

您必须在单元测试中模拟会话存储才能调用它。

一种方法是:

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 });