使用Sinon和Proxyquire对AWS SES进行存根

时间:2018-03-04 12:57:15

标签: javascript node.js unit-testing sinon proxyquire

我正在尝试对涉及调用AWS SES服务的一些代码进行单元测试。

以下是相关代码:

const AWS = require('aws-sdk');
const send = function(options) {
  const SES = new AWS.SES();
  return new Promise((resolve, reject) => {
    // clipped for brevity
    SES.sendEmail(sesOpts, (error, data) => {
      return error ? reject(error) : resolve(data);
    });
  });
}
module.exports = send;

这是一个测试,用Mocha运行:

let SESMock = function() {};
SESMock.prototype.sendEmail = sinon.stub();

const emailHelper = proxyquire('../../src/helpers/email', {
  'aws-sdk': {
    SES: SESMock,
  },
});

it('should call sendEmail', (done) => {
  const opts = {}; // imagine this has the mail sending options
  emailHelper.send(opts).then(() => {
        assert(SESMock.prototype.sendEmail.called);
        done();
    })
    .catch((error) => {
        console.error(error);
        done();
    });;
});

不知何故,尽管done()then()回调中都包含catch(),但测试每次都会超时。我非常期待这与我的存根设置有关,我想我已经多次这样做了,我已经完全失去了方向。

有人能按我正确的方向解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

是的,这是愚蠢的事情。 sendEmail存根需要产生:

SESMock.prototype.sendEmail = sinon.stub().yields();