Как издеваться над дочерней функцией с помощью Jest

#javascript #ecmascript-6 #jestjs

#javascript #ecmascript-6 #jestjs

Вопрос:

У меня есть sendMail.js содержание класса, как показано ниже

 export default function registerEmailHandlers() {
  const sendMailAsync = async (emailAddress) => {
    return await sendMail();
  }
  return {
    sendMailAsync
  }
}
 

Как я могу написать Jest mock для этого типа кода?
Я хочу, чтобы макет SendMailAsync всегда возвращал «некоторый тест».
Я пытался исследовать, но ничего такого, чего я хочу.

Комментарии:

1. Я не думаю, что это выполнимо, если вы не переместите свою функцию. Не уверен, почему вы хотите издеваться над ней, если вам нужно протестировать всю функцию

2. потому что я не хочу вызывать API для отправки почты в моем тесте.

3. Если да, то по какой причине вы не удаляете эту функцию, чтобы ее было легче издеваться?

4. Или вы можете издеваться sendMail (я полагаю, это из другого модуля или в другой области, которую можно издеваться), которая используется внутри вашей функции scope, также неплохая идея.

5. Если вы издеваетесь над SendMailAsync, что остается, что вы на самом деле тестируете? Издевайтесь над соавтором , sendMail.

Ответ №1:

Не могли бы вы сделать что-то вроде

 const mockSendMailAsync = jest.fn());

jest.mock('./path/to/file/sendMail', () => (
    sendMailAsync = mockSendMailAsync
)
 

Тогда вы могли бы утверждать, что был вызван mockSendMailAsync