J'essaie d'écrire des tests unitaires pour une fonction de middleware express qui envoie un courrier électronique en envoyant une requête ping à l'API Mailgun.Test de la méthode .send() Mailgun avec Mocha et Sinon
module.exports = {
sendEmail: function (req, res) {
let reqBody = req.body;
let to = reqBody.to;
let from = reqBody.from;
let subject = reqBody.subject;
let emailBody = reqBody.body;
let data = {
from: from,
to: to,
subject: subject,
text: emailBody
};
mailgun.messages().send(data, function (error, body) {
if (error) {
res.status(400).json(error);
return;
}
res.status(200).json(body);
});
}
};
Le fichier de test:
describe('\'sendEmail\' method',() => {
let mailgun;
beforeEach(() => {
mailgun = require('mailgun-js')({ apiKey: MAIL_GUN_API_KEY, domain: MAIL_GUN_DOMAIN });
});
it.only('should send the data to the MailGun API', (done) => {
sinon.spy(mailgun, 'messages');
sinon.spy(mailgun.messages(), 'send');
emailMiddleware.sendEmail(request, response);
// using sinon-chai here
mailgun.messages().send.should.have.been.called();
done();
});
Résultat sur l'exécution npm test
:
TypeError: [Function] is not a spy or a call to a spy!
Comment puis-je tester si la méthode
.send
est appelée àmailgun.messages().send(...)
? J'utilise directement l'API mailgun. Comment puis-je extirper mailgun lui-même?