Проверьте, возвращает ли функция sessionStorage с шуткой

Я пытаюсь написать шуточный тест для следующей функции, которая устанавливает запись 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('[email protected]', Date.now(), 'ha_sh', []));
});

person Ilja    schedule 04.12.2016    source источник
comment
вместо этого попробуйте window.sessionStorage   -  person Jyothi Babu Araja    schedule 04.12.2016


Ответы (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 });
person jeremy-denis    schedule 04.12.2016
comment
Вы также можете просто установить global.sessionStorage на свой макет. - person Andreas Köberle; 05.12.2016
comment
Мне также любопытно, можно ли описать всю процедуру? например, фиктивная функциональная часть, часть tests и вспомогательная часть sessionSotrage? Я до сих пор не понимаю, что такое фиктивная функция, куда мы должны поместить и как ее вызвать в тестовом файле? извините, в значительной степени новая для тестовой части - person tess hsu; 02.12.2019