Для создания имитации (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(), вы можете создавать и настраивать имитации функций и модулей для различных сценариев тестирования.


Назад