【问题标题】:Check if function returns sessionStorage with jest检查函数是否以开玩笑的方式返回 sessionStorage
【发布时间】:2016-12-04 12:50:00
【问题描述】:

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

【问题讨论】:

  • 改用 window.sessionStorage

标签: javascript reactjs testing jestjs


【解决方案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 });

【讨论】:

  • 您也可以将global.sessionStorage 设置为您的模拟。
  • 我也是个胆小鬼,能不能描述一下整个过程?像模拟函数部分、tests 部分和 sessionSotrage 助手部分?我仍然不明白模拟函数应该放在哪里以及如何在测试文件中调用它?抱歉,测试部分很新
猜你喜欢
  • 1970-01-01
  • 2021-10-16
  • 2021-12-11
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2018-10-15
相关资源
最近更新 更多