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