← Назад ко всем вопросам

Чем мок отличается от стаба и фейка?

1️⃣ Как кратко ответить

Мок, стаб и фейк — это техники тестирования, используемые для имитации поведения зависимостей в коде. Мок — это объект, который проверяет, были ли вызваны определенные методы. Стаб — это объект, который возвращает предопределенные данные, не проверяя вызовы. Фейк — это более сложная реализация, которая может иметь собственную логику, но упрощенную по сравнению с реальной зависимостью.

2️⃣ Подробное объяснение темы

В разработке фронтенда часто возникает необходимость тестировать компоненты или функции, которые зависят от внешних сервисов или сложных объектов. Чтобы изолировать тестируемый код и избежать зависимости от внешних факторов, используются моки, стабы и фейки. Эти техники помогают создать контролируемую среду для тестирования.

Мок (Mock):

Мок — это объект, который имитирует поведение реального объекта и позволяет проверять, как и сколько раз были вызваны его методы. Моки полезны, когда нужно удостовериться, что определенные методы вызываются с правильными параметрами.

Пример использования мока:

const mockFunction = jest.fn();
​
// Вызов функции
mockFunction('argument');
​
// Проверка, что функция была вызвана с определенным аргументом
expect(mockFunction).toHaveBeenCalledWith('argument');
  • jest.fn() создает мок-функцию.
  • mockFunction('argument') — вызов мок-функции с аргументом.
  • expect(mockFunction).toHaveBeenCalledWith('argument') — проверка, что функция была вызвана с указанным аргументом.

Стаб (Stub):

Стаб — это объект, который возвращает предопределенные значения, не проверяя, как и сколько раз он был вызван. Стабы полезны, когда нужно заменить часть системы, которая возвращает данные, например, API-запросы.

Пример использования стаба:

const stubFunction = jest.fn().mockReturnValue('stubbed value');
​
// Вызов функции
const result = stubFunction();
​
// Проверка возвращаемого значения
expect(result).toBe('stubbed value');
  • jest.fn().mockReturnValue('stubbed value') создает стаб-функцию, которая всегда возвращает 'stubbed value'.
  • stubFunction() — вызов стаб-функции.
  • expect(result).toBe('stubbed value') — проверка, что функция возвращает ожидаемое значение.

Фейк (Fake):

Фейк — это более сложная реализация, которая может содержать упрощенную логику, имитирующую поведение реальной зависимости. Фейки полезны, когда нужно протестировать взаимодействие с более сложной системой, например, базой данных, но без использования реальной системы.

Пример использования фейка:

class FakeDatabase {
  constructor() {
    this.data = [];
  }
​
  save(item) {
    this.data.push(item);
  }
​
  getAll() {
    return this.data;
  }
}
​
const fakeDb = new FakeDatabase();
fakeDb.save('item1');
fakeDb.save('item2');
​
const allItems = fakeDb.getAll();
expect(allItems).toEqual(['item1', 'item2']);
  • FakeDatabase — класс, имитирующий поведение базы данных.
  • save(item) — метод для сохранения элемента в массив.
  • getAll() — метод для получения всех сохраненных элементов.
  • expect(allItems).toEqual(['item1', 'item2']) — проверка, что все элементы были сохранены и возвращены правильно.

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

Тема: Тестирование
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки