Для создания имитации (mock) функции в Jest используется метод jest.fn(). Этот метод позволяет создать новую имитационную функцию, которую можно настроить для возврата определенных значений, имитации поведения или отслеживания вызовов. Вот ка к это делается:

**Пример создания и настройки имитации функции

  1. Создание пустой имитации:
const mockFn = jest.fn();
  1. Настройка возвращаемого значения:
mockFn.mockReturnValue(42);
console.log(mockFn()); // 42
  1. Настройка асинхронного возвращаемого значения:
mockFn.mockResolvedValue("data");
mockFn().then((data) => console.log(data)); // 'data'
  1. Настройка реализации функции:
mockFn.mockImplementation((x) => x * 2);
console.log(mockFn(5)); // 10
  1. Отслеживание вызовов:
mockFn("a", "b");
console.log(mockFn.mock.calls); // [['a', 'b']]

**Пример имитации существующей функции

Если вы хотите имитировать существующую функцию в объекте, можно использовать jest.spyOn():

const myObject = {
  myFunction: (a, b) => a + b,
};
 
const spy = jest
  .spyOn(myObject, "myFunction")
  .mockImplementation((a, b) => a * b);
 
console.log(myObject.myFunction(2, 3)); // 6
console.log(spy.mock.calls); // [[2, 3]]

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

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

jest.mock("./myModule", () => ({
  myFunction: jest.fn(() => "mocked value"),
}));
 
const myModule = require("./myModule");
console.log(myModule.myFunction()); // 'mocked value'

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

Для имитации методов класса можно использовать 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'

Имитация функций в Jest позволяет контролировать поведение зависимостей в тестах, что делает тесты более предсказуемыми и изолированными. Используя jest.fn()jest.spyOn() и jest.mock(), вы можете создавать и настраивать имитации функций и модулей для различных сценариев тестирования.


Назад