javascript - 使用Sinon和Proxyquire对AWS SES进行 stub

标签 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() 回调中,但测试每次都会超时。我非常希望这与我的 stub 设置有关,我想我已经为此转身了很多次,以至于我完全迷失了方向。

任何人都可以插入我朝正确的方向解决这个问题吗?

谢谢

最佳答案

是的,这很愚蠢。 sendEmail stub 需要产生:

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

关于javascript - 使用Sinon和Proxyquire对AWS SES进行 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095644/

相关文章:

node.js - FeathersJS 使用客户端证书进行身份验证

unit-testing - 如何在 oozie 工作流中运行 hadoop 示例 jar?

java - 有没有办法在测试环境中运行 junit/TestNG 测试用例?

javascript - 函数代理 .toString() 错误

Javascript 标签导航

javascript - jade to pug migration => 无法读取函数调用中未定义的属性 'every'

unit-testing - 当多次调用一个函数时,是否有一种方法可以使AssertCalled每次调用

javascript - 如何设置 jquery 可拖动的边距?

javascript - Sencha Touch 2 全局变量 - 随处访问

node.js - 是什么阻止 Node.js 异步