Имитационная функция (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'