Самодельный mock‑функционал с учётом вызовов и аргументов

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

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

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте собственную mock‑функцию, которая будет вести учёт количества её вызовов, сохранять переданные в каждый вызов аргументы и предоставлять возможность задавать заранее определённые возвращаемые значения, имитируя тем самым поведение оригинального метода.

Ответ

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

function mockFunction() {
  const once = [];
  let defaultValue;
  function mock(...args) {
    mock.data.calls++;
    mock.data.args.push(args);
    return once.length ? once.shift() : defaultValue;
  }
  mock.data = { calls: 0, args: [] };
  mock.mockReturnValue = value => { defaultValue = value; return mock; };
  mock.mockReturnValueOnce = value => { once.push(value); return mock; };
  mock.mockClear = () => { mock.data.calls = 0; mock.data.args = []; return mock; };
  return mock;
}
const fn = mockFunction().mockReturnValue(0).mockReturnValueOnce(42);
fn('a'); // 42
fn('b'); // 0

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее