Я обновил свой ответ, чтобы указать на рабочий пример, репозиторий github.

аюсь издеваться над классомMailer используя шутку, и я не могу понять, как это сделать. Документы не дают много примеров того, как это работает. Процесс будет иметь событие узлаpassword-reset это происходит, и когда это событие происходит, я хочу отправить электронное письмо, используяMailer.send(to, subject, body), Вот моя структура каталогов:

project_root
-- __test__
---- server
------ services
-------- emails
---------- mailer.test.js
-- server
---- services
------ emails
-------- mailer.js
-------- __mocks__
---------- mailer.js

Вот мой макет файла__mocks__/mailer.js:

const Mailer = jest.genMockFromModule('Mailer');

function send(to, subject, body) {
  return { to, subject, body };
}

module.exports = Mailer;

и мойmailer.test.js

const EventEmitter = require('events');
const Mailer = jest.mock('../../../../server/services/emails/mailer');

test('sends an email when the password-reset event is fired', () => {
  const send = Mailer.send();
  const event = new EventEmitter();
  event.emit('password-reset');
  expect(send).toHaveBeenCalled();
});

и наконец мойmailer.js учебный класс:

class Mailer {

  constructor() {
    this.mailgun = require('mailgun-js')({
      apiKey: process.env.MAILGUN_API_KEY,
      domain: process.env.MAILGUN_DOMAIN,
    });
  }

  send(to, subject, body) {
    return new Promise((reject, resolve) => {
      this.mailgun.messages().send({
        from: 'Securely App <[email protected]>',
        to,
        subject: subject,
        html: body,
      }, (error, body) => {
        if (error) {
          return reject(error);
        }

        return resolve('The email was sent successfully!');
      });
    });
  }

}

module.exports = new Mailer();

Итак, как мне успешно смоделировать и протестировать этот класс, используя Jest? Большое спасибо за помощь!

Ответы на вопрос(2)

Ваш ответ на вопрос