Когда дело доходит до модульного тестирования JavaScript, Jest является популярным выбором среди разработчиков. Одной из ключевых особенностей Jest является его способность создавать фиктивные функции, которые позволяют нам моделировать поведение зависимостей и тестировать наш код изолированно. В этой статье мы углубимся в имитацию экземпляров классов в Jest и рассмотрим различные методы достижения этой цели.
Создание фиктивных экземпляров:
Чтобы имитировать экземпляр класса в Jest, нам нужно создать макетную версию класса. Это можно сделать несколькими способами:
-
Издевательство вручную.
Один из подходов — вручную создать макет класса, который расширяет исходный класс и переопределяет его методы с помощью jest.fn(). Вот пример:class Class1 { method1() { // original implementation } } class MockClass1 extends Class1 { method1 = jest.fn(); }
С помощью этой настройки мы можем создать экземпляр
MockClass1
и использовать его как макет объекта для тестирования. -
jest.mock():
Jest предоставляет встроенную функцию под названиемjest.mock()
, которая автоматически имитирует весь модуль. Чтобы имитировать экземпляр класса, мы можем использовать функциюjest.mock()
и предоставить фабричную функцию, которая возвращает фиктивный экземпляр. Вот пример:class Class1 { method1() { // original implementation } } jest.mock('./path/to/Class1', () => { return { __esModule: true, default: { method1: jest.fn(), }, }; });
При таком подходе при каждом импорте исходного
Class1
Jest автоматически заменит его макетной реализацией. -
jest.createMockFromModule():
Другой вариант — использоватьjest.createMockFromModule()
для создания фиктивного экземпляра непосредственно из исходного модуля. Вот пример:jest.mock('./path/to/Class1', () => { const originalModule = jest.requireActual('./path/to/Class1'); return { __esModule: true, ...jest.createMockFromModule('./path/to/Class1'), }; });
Этот метод создает макет, в котором все методы исходного модуля заменены на
jest.fn()
.
Использование фиктивных экземпляров:
После того как мы создали фиктивные экземпляры, мы можем использовать их в наших тестах для имитации поведения исходного класса. Вот несколько распространенных методов:
-
Реализация ложного метода:
Мы можем использоватьmockImplementation()
илиmockReturnValue()
для определения пользовательского поведения для макетных методов. Например:const mockInstance = new MockClass1(); mockInstance.method1.mockImplementation(() => 'Mocked implementation');
-
Проверка вызовов методов.
Мы можем использоватьtoHaveBeenCalled()
илиtoHaveBeenCalledWith()
, чтобы проверить, был ли вызван метод и с какими аргументами. Например:const mockInstance = new MockClass1(); mockInstance.method1('arg1', 'arg2'); expect(mockInstance.method1).toHaveBeenCalledWith('arg1', 'arg2');
-
Сброс макетов.
Мы можем использоватьmockClear()
илиmockReset()
для сброса состояния макета и очистки всех записанных вызовов или пользовательских реализаций. Например:const mockInstance = new MockClass1(); mockInstance.method1.mockImplementation(() => 'Mocked implementation'); mockInstance.method1(); expect(mockInstance.method1).toHaveBeenCalled(); mockInstance.method1.mockReset(); expect(mockInstance.method1).not.toHaveBeenCalled();
В этой статье мы рассмотрели различные методы имитации экземпляров классов в Jest. Мы рассмотрели ручное издевательство, используя jest.mock()
и jest.createMockFromModule()
. Мы также обсудили различные способы взаимодействия с макетами экземпляров, такие как реализации макетов методов, проверка вызовов методов и сброс макетов. Вооружившись этими знаниями, вы сможете эффективно использовать Jest для написания комплексных модульных тестов для вашего кода JavaScript.
Помните, что правильное тестирование имеет решающее значение для поддержания качества кода и обеспечения надежности вашего программного обеспечения. Итак, вперед и используйте возможности Jest для создания надежных тестов для экземпляров вашего класса!