nodejs test - TypeError:undefined不是函数

时间:2015-05-12 17:14:43

标签: node.js testing amazon-s3 sinon

对于我的以下代码S3Handler,我有以下测试,它返回错误:TypeError: undefined is not a function

抛出错误的行是testedModule._get(bucketName, imgName, function () {

为什么我收到此错误?

S3Handler

'use strict';

var s3 = new (require('aws-sdk')).S3();

var S3Handler = {};

S3Handler._get = function (bucketName, imgName, callback) {

    var params = {
        Bucket: bucketName,
        Key: imgName
    };

    s3.getObject(params, function (error, data) {
        if (error) {
            return callback(error, null);
        }
        console.log(data);
        return callback(null, data);
    });
};

试验:

describe("S3Handler", function () {
    describe("S3Handler._get", function () {
        var testedModule, imgName, callbackSpy, bucketName, getStub, fakeResponse, s3Stub;

        before(function () {

            fakeResponse = {Body: "Image content"};

            imgName = "test.jpg";

            bucketName = "testBucket";

            callbackSpy = sinon.spy();

            getStub = sinon.stub();

            s3Stub = sinon.stub().returns({getObject: getStub});


            testedModule = proxyquire("../S3Handler.js", {
                'aws-sdk': {
                    "S3": s3Stub
                }
            });
        });

        it("fetch object from S3Bucket", function () {
            getStub.withArgs(bucketName, imgName).callsArgWith(1, null, fakeResponse);
            testedModule._get(bucketName, imgName, function () {
                callbackSpy.apply(null, fakeResponse);
            });
        });
    });
});

1 个答案:

答案 0 :(得分:0)

当然,在疲倦时多注意确实有帮助。

如果我导出了我的模块,它也会有所帮助!!

'use strict';

var s3 = new (require('aws-sdk')).S3();

var S3Handler = {};

S3Handler._get = function (bucketName, imgName, callback) {

    var params = {
        Bucket: bucketName,
        Key: imgName
    };

    s3.getObject(params, function (error, data) {
        if (error) {
            return callback(error, null);
        }
        console.log(data);
        return callback(null, data);
    });
};

module.exports = S3Hanlder;