Как передать объект типа `any` с функциями в шутку?

#typescript #unit-testing #mocking #ts-jest

#typescript #модульное тестирование #издевательство #ts-jest

Вопрос:

У меня есть код, в котором я получаю объект от стороннего компонента, поэтому я пометил его тип как any . Есть несколько методов этого объекта, которые я использую в своем коде.

 init(context: any) {
  context.doSomething('profile');
}
 

Теперь, тестируя этот код, я хочу поиздеваться над функциональностью doSomething метода, но я не уверен, как я могу это сделать. Я попробовал несколько вещей в jest.fn(), но, похоже, ничего не работает. Я попробовал что-то вроде

 type ContextType = { doSomething?: (arg0: { val: string; }) => any; }
let context: ContextType = {};
jest.spyOn(context, 'doSomething').mockReturnValue({});
obj.init(context);
 

Но, похоже, это не работает. Но может кто-нибудь сказать мне, как я могу заставить это работать в моих тестах?

Ответ №1:

Создайте a context , который включает doSomething в себя как макет функции.

 let context = { doSomething: jest.fn() };
obj.init(context);

expect(context.doSomething).toHaveBeenCalledWith('profile');