Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: IndexedDB, localStorage, API testing, mocking, unit tests, integration tests

Как писать тесты для сервиса, работающего с IndexedDB, localStorage и API?

Вопрос проверяет умение тестировать сервисы, которые используют IndexedDB, localStorage и внешние API, что важно для обеспечения надежности клиентских приложений.

Короткий ответ

Для тестирования сервиса с IndexedDB, localStorage и API нужно изолировать зависимости. Используйте моки для API и localStorage, а для IndexedDB — фейковую реализацию или библиотеку fake-indexeddb. Пишите юнит-тесты для логики и интеграционные для проверки взаимодействия с хранилищами. Пример: мок fetch для API, замена localStorage на объект в памяти.

Длинный ответ

Подход к тестированию сервиса с несколькими источниками данных

Тестирование сервиса, который работает с IndexedDB, localStorage и внешним API, требует изоляции каждого внешнего компонента. Основная цель — проверить логику сервиса, не завися от реальных браузерных API или сети. Для этого применяются моки, стабы и фейковые реализации.

Изоляция localStorage

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

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

Внешние 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' });
});

Структура тестов

  • Юнит-тесты: проверяют отдельные методы сервиса с замоканными зависимостями.
  • Интеграционные тесты: проверяют взаимодействие с IndexedDB и localStorage через фейковые реализации.
  • Сквозные тесты: могут использовать реальные API, но обычно не нужны на уровне сервиса.

Вывод

Применяйте моки для API и localStorage, а для IndexedDB используйте fake-indexeddb. Это позволяет тестировать логику сервиса быстро и надежно, без зависимости от браузера или сети. Такой подход подходит для любых клиентских приложений, где важна изоляция тестов.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Testing

Ключевые слова

#IndexedDB

#localStorage

#API testing

#mocking

#unit tests

#integration tests

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию