Для создания имитации (mock) функции в Jest используется метод jest.fn()
. Этот метод позволяет создать новую имитационную функцию, которую можно настроить для возврата определенных значений, имитации поведения или отслеживания вызовов. Вот ка к это делается:
**Пример создания и настройки имитации функции
- Создание пустой имитации:
const mockFn = jest.fn();
- Настройка возвращаемого значения:
mockFn.mockReturnValue(42);
console.log(mockFn()); // 42
- Настройка асинхронного возвращаемого значения:
mockFn.mockResolvedValue('data');
mockFn().then(data => console.log(data)); // 'data'
- Настройка реализации функции:
mockFn.mockImplementation(x => x * 2);
console.log(mockFn(5)); // 10
- Отслеживание вызовов:
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()
, вы можете создавать и настраивать имитации функций и модулей для различных сценариев тестирования.