Имитационная функция (mock function) используется для отслеживания вызовов функции и имитации её функциональности. Это позволяет контролировать поведение функции в тестах, делая их более предсказуемыми и изолированными. Вот как работает имитация функции в Jest:
**Основные возможности имитации функции:
- Отслеживание вызовов: Имитация функции позволяет отслеживать, сколько раз и с какими аргументами была вызвана функция.
- Имитация поведения: Вы можете настроить имитацию функции так, чтобы она возвращала определенные значения или выполняла определенные действия.
- Замена реальной реализации: Имитация позволяет заменить реальную функцию на имитированную версию, что полезно для тестирования кода, который зависит от внешних зависимостей.
**Пример создания и использования имитации функции
// Создание имитации функции
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'