Чем мок отличается от стаба и фейка?
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'])— проверка, что все элементы были сохранены и возвращены правильно.
Моки, стабы и фейки помогают изолировать тестируемый код от внешних зависимостей, обеспечивая более надежное и предсказуемое тестирование.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться