节点 - 用于测试的Stub节点邮件传输

时间:2017-12-07 16:48:55

标签: node.js unit-testing stub

我有一个我想测试的功能:

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

如何在这种情况下存根transporter.sendMail?我找到了这个post,但它并不适合我想要做的事情。

我可以将发送部分移动到它自己的功能和存根,如果我真的必须这样做,但如果我不必走这条路线会很好。

1 个答案:

答案 0 :(得分:0)

此示例适用于我

======== 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
  });
});