Jest моделирует зависимости с помощью механизма имитации (mocking). Это позволяет разработчикам заменять реальные зависимости, такие как функции, модули или классы, на имитированные версии, которые могут контролироваться в тестах. Вот как Jest реализует имитацию:
- Имитация функций: Jest позволяет создавать имитации функций с помощью
jest.fn()
. Эти имитации могут быть настроены для возврата определенных значений, выполнения определенных действий или проверки вызовов. - Имитация модулей: Jest предоставляет
jest.mock()
для имитации целых модулей. Это позволяет заменить реальные модули на имитированные версии, что полезно для тестирования изолированных частей кода, которые зависят от внешних модулей. - Имитация классов: Jest также поддерживает имитацию классов с помощью
jest.spyOn()
. Это позволяет контролировать вызовы методов класса и их поведение в тестах. - Автоматическая имитация: Jest может автоматически имитировать модули, если они находятся в папке
__mocks__
рядом с исходным модулем. Это упрощает управление имитациями для часто используемых зависимостей.
Примеры:
- Имитация функции:
const mockFn = jest.fn();
mockFn.mockReturnValue(42);
console.log(mockFn()); // 42
- Имитация модуля:
jest.mock('./myModule', () => ({
myFunction: jest.fn(() => 'mocked value')
}));
const myModule = require('./myModule');
console.log(myModule.myFunction()); // 'mocked value'
- Имитация класса:
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 позволяет разработчикам контролировать окружение тестов, упрощая тестирование изолированных частей кода и обеспечивая более предсказуемые результаты.