Похоже, есть проблема с jest.mock
( # 4262 ), касающаяся moduleNameMapper
для распознавателей модулей, псевдонимов, пути, независимо от того, что вы хотите вызвать с помощью @/something
.
// you cannot use a module resolver (i.e. '@')
jest.mock('@/services/orders.service');
// you must use the full path to the file for the import and mock
import OrdersService from '../../src/services/orders.service';
jest.mock('../../src/services/orders.service');
Следите за обновлениями по данной проблеме, похоже, что последнее обновление было 9/28 .
Во-вторых, при условии устранения проблемы, указанной выше, вы экспортируетеэкземпляр класса, а не сам класс, как это сделано в примере Jest.Следовательно, у вас не будет доступа к методу clearMock
в OrdersService
, вместо этого вы можете вызывать clearMock
для каждого смоделированного метода в экземпляре класса.
// mockClear will be undefined
OrdersService.mockClear();
// mockClear is defined
OrdersService.getAll.mockClear();
Если вы хотите экспортироватьНапример, вы можете просто очистить все макеты, используя jest.clearAllMocks
в beforeEach
или выполнить цикл по всем методам и вызвать mockClear
для каждого.В противном случае экспорт самого класса даст вам доступ к OrdersService.mockClear
, который будет ...
Очистить все экземпляры и вызовы конструктора и всех методов (ref)
Это представляется полезным в тех случаях, когда макетированный класс используется / создается в другом классе, который вы пытаетесь протестировать, как в примере с шуткой.
Все это имеетбыл протестирован и подтвержден с использованием Jest v23.6 и vue-cli v3.0.4.