Когда дело доходит до модульного тестирования 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(), }, }; });При таком подходе при каждом импорте исходного
Class1Jest автоматически заменит его макетной реализацией. -
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 для создания надежных тестов для экземпляров вашего класса!