Jest моделирует зависимости с помощью механизма имитации (mocking). Это позволяет разработчикам заменять реальные зависимости, такие как функции, модули или классы, на имитированные версии, которые могут контролироваться в тестах. Вот как Jest реализует имитацию:

  1. Имитация функций: Jest позволяет создавать имитации функций с помощью jest.fn(). Эти имитации могут быть настроены для возврата определенных значений, выполнения определенных действий или проверки вызовов.
  2. Имитация модулей: Jest предоставляет jest.mock() для имитации целых модулей. Это позволяет заменить реальные модули на имитированные версии, что полезно для тестирования изолированных частей кода, которые зависят от внешних модулей.
  3. Имитация классов: Jest также поддерживает имитацию классов с помощью jest.spyOn(). Это позволяет контролировать вызовы методов класса и их поведение в тестах.
  4. Автоматическая имитация: 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 позволяет разработчикам контролировать окружение тестов, упрощая тестирование изолированных частей кода и обеспечивая более предсказуемые результаты.


Назад