0

我正在使用适用于 NodeJS 的AWS开发工具包。

我有一个moduleFoo像这样设置的模块():

if (global.GENTLY) { require = GENTLY.hijack(require); }

var aws = require("aws-sdk"),
    ec2;

exports.initEC2Client = function () {
    ec2 = new aws.EC2();
};

exports.doSomething = function () {
    var params;

    // params gets populated here...

    ec2.Client.describeInstances(params, function (err, data) {
        // logic!
    }
}

我正在尝试消除该describeInstances方法。

我知道我可以通过以下方式对EC2班级进行存根:

gently.stub("aws-sdk", "EC2");

根据Gently docs ,我可以通过对其构造函数进行存根来创建一个假实例:

var ec2Stub = gently.stub("aws-sdk", "EC2"),
    ec2;

gently.expect(ec2Stub, "new", function () {
    ec2 = this;
});

moduleFoo.initEC2Client();

在这一点上,我卡住了。我需要做的是存根出属于的对象的方法ec2。有没有办法使用 Gently 来解决这个问题?

4

1 回答 1

0

在按下提交之前,我在输入整个问题后发现了答案。

我通过初始化Client为一个空对象然后在其上存根describeInstances方法来解决它:

var ec2Stub = gently.stub("aws-sdk", "EC2"),
    ec2;

gently.expect(ec2Stub, "new", function () {
    ec2 = this;
});

moduleFoo.initEC2Client();

ec2.Client = {};

gently.expect(ec2.Client, "describeInstances", function (params, callback) {
    // assert `params` is populated ok
    callback();
})

moduleFoo.doSomething();

gently.verify(); // throws no error
于 2013-02-22T15:30:44.880 回答