0

AWS SDK for NodeJSを使用しています。

モジュール ( 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 に答える