Мокирование localStorage
По подскажите, как замокировать обращение к localStorage в react компоненте. Как создать моковый local storage с тестовым состоянием ?
Ответы (2 шт):
Автор решения: Dmitry
→ Ссылка
Говорят, что прошлые решения уже не подходят на текущее время, но можно сделать так
jest.spyOn(Storage.prototype, 'setItem');
Storage.prototype.setItem = jest.fn();
expect(localStorage.setItem).toHaveBeenCalled();
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
в таком случае у вас будет очень много дублирующего кода.