node.js - Node - 用于测试的 stub Nodemailer 传输

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

在这种情况下我该如何 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/

相关文章:

c# - 您是否应该对共享相同私有(private)实现的单独方法进行重复单元测试?

php - 如何在Codeception\Util\Stub中正确使用atLeastOnce方法?

javascript - 如何使用匹配和正则表达式返回变量的内容?

javascript - 如何为grpc(node.js)编写中间件

node.js - 我如何使用axios和cheerio实现多页面抓取

node.js - 如何配置 VSCode 的组织导入顺序?

visual-studio - 导入Visual Studio测试项目时如何创建vsmdi/testrunco​​nfig文件?

java - 单元测试 Amazon SWF 子工作流程

Java RMI,找不到 stub 类,java.rmi.ServerException : RemoteException occurred in server thread;

.net - Assert.Inconclusive 的用法