Comment se moquer es6 classe à l'aide de la Plaisanterie

Je cherche à simuler une classe Mailer à l'aide de la blague et je ne peux pas comprendre comment le faire. Les docs ne pas donner de nombreux exemples de la façon dont cela fonctionne. Le processus est la je vais avoir un noeud événement password-reset qui est tiré et que lorsque l'événement est déclenché, je veux envoyer un e-mail à l'aide de Mailer.send(to, subject, body). Voici ma structure de répertoire:

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

Voici ma maquette fichier __mocks__/mailer.js:

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

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

module.exports = Mailer;

et mon 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();
});

et enfin mon mailer.js classe:

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();

Alors, comment réussir à se moquer et de tester cette classe, à l'aide de la Blague? Merci beaucoup pour aider!

OriginalL'auteur dericcain | 2017-05-03