Имитационная функция (mock function) используется для отслеживания вызовов функции и имитации её функциональности. Это позволяет контролировать поведение функции в тестах, делая их более предсказуемыми и изолированными. Вот как работает имитация функции в Jest:

**Основные возможности имитации функции:

  1. Отслеживание вызовов: Имитация функции позволяет отслеживать, сколько раз и с какими аргументами была вызвана функция.
  2. Имитация поведения: Вы можете настроить имитацию функции так, чтобы она возвращала определенные значения или выполняла определенные действия.
  3. Замена реальной реализации: Имитация позволяет заменить реальную функцию на имитированную версию, что полезно для тестирования кода, который зависит от внешних зависимостей.

**Пример создания и использования имитации функции

// Создание имитации функции
const mockFn = jest.fn();
 
// Настройка возвращаемого значения
mockFn.mockReturnValue(42);
 
// Использование имитации функции
console.log(mockFn()); // 42
 
// Отслеживание вызовов
mockFn("a", "b");
console.log(mockFn.mock.calls); // [['a', 'b']]

**Пример имитации модуля

Если вы хотите имитировать целый модуль, можно использовать jest.mock():

// В папке __mocks__ создайте файл axios.js
module.exports = {
  get: jest.fn(() => Promise.resolve({ data: {} })),
};
 
// В вашем тесте
jest.mock("axios");
const axios = require("axios");
 
test("should fetch data", async () => {
  const response = await axios.get("/api/data");
  expect(response.data).toEqual({});
});

**Пример имитации метода класса

Для имитации методов класса можно использовать jest.spyOn():

class MyClass {
  method() {
    return "original value";
  }
}
 
const spy = jest
  .spyOn(MyClass.prototype, "method")
  .mockReturnValue("mocked value");
const instance = new MyClass();
console.log(instance.method()); // 'mocked value'

Назад