我有一个想要测试的函数:
var mailServerOptions = {....};
var transporter = nodemailer.createTransport(mailServerOptions);
exports.sendTemplateEmail = (to, template, data) => {
var mailOptions = {....}
return new Promise((resolve, reject) => {
transporter.sendMail(mailOptions, (err, result) => {
if (err) {
return reject(err)
}
return resolve(result);
});
});
}
在这种情况下我该如何 stub transporter.sendMail?我找到了这个post但它并不真正适合我想做的事情。
如果我确实需要的话,我可以将发送部分移动到它自己的函数和 stub 中,但如果我不必走那条路那就太好了。
最佳答案
这个例子对我来说效果很好
======== myfile.js ========
// SOME CODE HERE
transporter.sendMail(mailOptions, (err, info) => {
// PROCESS RESULT HERE
});
======== myfile.spec.js(单元测试文件)========
const sinon = require('sinon');
const nodemailer = require('nodemailer');
const sandbox = sinon.sandbox.create();
descript('XXX', () => {
it('XXX', done => {
const transport = {
sendMail: (data, callback) => {
const err = new Error('some error');
callback(err, null);
}
};
sandbox.stub(nodemailer, 'createTransport').returns(transport);
// CALL FUNCTION TO TEST
// EXPECT RESULT
});
});
关于node.js - Node - 用于测试的 stub Nodemailer 传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699899/