jestを使ってクラスMailer
を模擬しようとしていますが、その方法を理解できません。ドキュメントでは、これがどのように動作するかの例はあまりありません。このプロセスはノードのイベントpassword-reset
が発生し、そのイベントが発生したときにMailer.send(to, subject, body)
を使用して電子メールを送信したいと考えています。ここに私のディレクトリ構造は次のとおりです。Jestを使ってes6クラスを模擬する方法
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();
ここ
project_root
-- __test__
---- server
------ services
-------- emails
---------- mailer.test.js
-- server
---- services
------ emails
-------- mailer.js
-------- __mocks__
---------- mailer.js
は私のモックファイル__mocks__/mailer.js
です
Jestを使って、このクラスを模擬してテストするにはどうすればいいですか?助けてくれてありがとう!
私は家に帰って試してみることができません。非常に素晴らしい説明をいただきありがとうございます。 – dericcain