Вопрос проверяет умение тестировать сервисы, которые используют IndexedDB, localStorage и внешние API, что важно для обеспечения надежности клиентских приложений.
Тестирование сервиса, который работает с IndexedDB, localStorage и внешним API, требует изоляции каждого внешнего компонента. Основная цель — проверить логику сервиса, не завися от реальных браузерных API или сети. Для этого применяются моки, стабы и фейковые реализации.
localStorage — синхронное хранилище, его легко замокать. В тестах можно заменить глобальный объект localStorage на простой объект в памяти. Например, в Jest используйте Object.defineProperty или библиотеку jest-localstorage-mock.
// Пример мока localStorage в Jest
const localStorageMock = {
getItem: jest.fn(),
setItem: jest.fn(),
removeItem: jest.fn(),
clear: jest.fn(),
};
Object.defineProperty(window, 'localStorage', {
value: localStorageMock,
});IndexedDB — асинхронное и сложное API. Для тестов используйте библиотеку fake-indexeddb, которая реализует IndexedDB в памяти. Это позволяет запускать тесты без браузера и сбрасывать состояние между тестами.
// Установка fake-indexeddb
// npm install fake-indexeddb
import 'fake-indexeddb/auto';
// Теперь indexeddb доступен как обычно
const request = indexedDB.open('test', 1);
request.onsuccess = () => {
const db = request.result;
// работа с db
};Внешние API мокаются с помощью библиотек вроде jest-fetch-mock или msw (Mock Service Worker). Это позволяет контролировать ответы и проверять, что сервис отправляет правильные запросы.
// Пример с jest-fetch-mock
import fetchMock from 'jest-fetch-mock';
fetchMock.enableMocks();
beforeEach(() => {
fetchMock.resetMocks();
});
test('сервис получает данные', async () => {
fetchMock.mockResponseOnce(JSON.stringify({ data: 'test' }));
const result = await myService.fetchData();
expect(result).toEqual({ data: 'test' });
});Применяйте моки для API и localStorage, а для IndexedDB используйте fake-indexeddb. Это позволяет тестировать логику сервиса быстро и надежно, без зависимости от браузера или сети. Такой подход подходит для любых клиентских приложений, где важна изоляция тестов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию