检查函数是否通过jest返回sessionStorage

时间:2016-12-04 12:50:01

标签: javascript reactjs testing jestjs

我正在尝试为以下函数编写一个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', []));
});

1 个答案:

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