Мокирование localStorage

По подскажите, как замокировать обращение к localStorage в react компоненте. Как создать моковый local storage с тестовым состоянием ?


Ответы (2 шт):

Автор решения: Dmitry

Говорят, что прошлые решения уже не подходят на текущее время, но можно сделать так

jest.spyOn(Storage.prototype, 'setItem');
Storage.prototype.setItem = jest.fn();

expect(localStorage.setItem).toHaveBeenCalled();

Оригинал ответа на enSO

PS: не тестировал как это работает, может кто подправит....

→ Ссылка
Автор решения: Randall

Да, горьким опытом обучен мокать localStorage.

В setupTests.js файле нужно все это дело замокать один раз для всего проекта.

function setItem(key, item) {
  this.state[key] = item;
}

function getItem(key) {
  return this.state[key];
}

const localStorageMock = {
  state: {
    token: process.env.TOKEN,
  },
  setItem: jest.fn(setItem),
  getItem: jest.fn(getItem),
  clear: jest.fn(),
};

Object.defineProperty(window, 'localStorage', {
  value: localStorageMock,
});

export default localStorageMock;

Или можете эту конструкцию вынести в beforeEach в таком случае у вас будет очень много дублирующего кода.

→ Ссылка