sinon.stub不存根原始方法

超级堆栈

在为下面的代码编写测试时,调用时S3resizer存根S3getStub似乎不起作用testedModule,我从mocha得到响应AssertionError: expected stub to have been called at least once, but it was never called

为什么S3resizer_get不存根?

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) {
            console.log("Error, %s", error);
            callback(error, null);
        }
        console.log("good data");
        callback(null, data);
    });
};

module.exports = S3Handler;

S3resizer

/**
 * This function is called when the protocol defined in index.js is "s3:".
*/

'use strict';

var async = require('async');
var S3 = require("./S3Handler");
var S3get = S3._get;
var S3put = S3._put;
var read = require("./readDirectory");
var readDirFile = read._get;
var readDirCont = read._getContent;
var rs = require("./resizer").resize;
var _sqs = require("./sqsHandler");
var sqsSend = _sqs._sendMessage;

var S3resizer = {};

S3resizer.rs = function (imgName, bucketName) {

S3get(bucketName, imgName, function (error, data) {console.log(data);});
};

module.exports = S3resizer;

tests

var chai = require('chai');
var sinonChai = require("sinon-chai");
var expect = chai.expect;
var extend = require('lodash').extend;
var sinon = require('sinon');
chai.use(sinonChai);
var proxyquire = require('proxyquire').noPreserveCache();
var url = require('url');
var mockDir = require('mock-fs');

describe("S3resizer", function () {
    var testedModule, fakeResponse, fakeFiles, S3getStub, rsStub, readDirFileStub, readDirContStub, S3putStub, sqsCreateStub, sqsSendStub, cbSpy, callbSpy, imgName, bucketName, sizesObj, imageType, obj;

before(function () {

    S3getStub = sinon.stub();

    rsStub = sinon.stub();

    readDirContStub = sinon.stub();

    readDirFileStub = sinon.stub();

    S3putStub = sinon.stub();

    sqsCreateStub = sinon.stub();

    sqsSendStub = sinon.stub();

    cbSpy = sinon.spy();

    callbSpy = sinon.spy();

    testedModule = proxyquire('../S3resizer', {
        './S3Handler': {
            _get: S3getStub,
            _put: S3putStub
        },
        './readDirectory': {
            _get: readDirFileStub,
            _getContent: readDirContStub
        },
        './resizer': {
            resize: rsStub
        },
        './sqsHandler': {
            _sendMessage: sqsSendStub
        },
    });

    imgName = "Whatever";

    bucketName = "Chappie";

    sizesObj = [
        { width: 800, height: 800, name: 'large' },
        { width: 500, height: 500, name: 'medium' },
        { width: 200, height: 200, name: 'small' },
        { width: 45, height: 45, name: 'thumbnail'}
    ];

    imageType = "png";

    obj = {
        "event":"re-sized",
        "message": {
            "url":"S3://bucketname/images/908798",
            "sizes":["large","medium","small","thumbnail"]
        }
    };

    fakeResponse = {Body: 'image content'};

    fakeFiles = ["thumbnail_Whatever", "small_Whatever", "medium_Whatever", "large_Whatever"];



});

it("calls callback with message 'Done'", function () {
    S3getStub.callsArgWith(2, null, fakeResponse);

    testedModule.rs(imgName, bucketName);
    expect(S3getStub).has.been.called;  
});

});

超级堆栈

这工作了。我必须重新测试模块,以避免使用缓存版本,并重构代码以使用require模块的全局替代。

describe("S3resizer succesfull call", function () {

    // To avoid having to refactor code with a global override of the require method and using the cached versions from previous tests, freshly require the modules and inject in stubs.
    var S3 = require("../S3Handler");
    var read = require("../readDirectory");
    var _resizer= require("../resizer");
    var _sqs = require("../sqsHandler");

    var testedModule, fakeResponse, fakePutMessage, fakeSqsMessage, fakeFiles, S3getStub, rsStub, readDirFileStub, readDirContStub, S3putStub, sqsSendStub, cbSpy, callbSpy, imgName, bucketName, sizesObj, imageType, obj;

    before(function () {

        S3getStub = sinon.stub(S3, "_get");

        rsStub = sinon.stub(_resizer, "resize");

        readDirContStub = sinon.stub(read, "_getContent");

        readDirFileStub = sinon.stub(read, "_get");

        S3putStub = sinon.stub(S3, "_put");

        sqsSendStub = sinon.stub(_sqs, "_sendMessage");

        cbSpy = sinon.spy();

        callbSpy = sinon.spy();

        testedModule = proxyquire('../S3resizer', {
            './S3Handler': {
                _get: S3getStub,
                _put: S3putStub
            },
            './readDirectory': {
                _get: readDirFileStub,
                _getContent: readDirContStub
            },
            './resizer': {
                resize: rsStub
            },
            './sqsHandler': {
                _sendMessage: sqsSendStub
            }
        });

        imgName = "Whatever";

        bucketName = "Chappie";

        sizesObj = [
            { width: 800, height: 800, name: 'large' },
            { width: 500, height: 500, name: 'medium' },
            { width: 200, height: 200, name: 'small' },
            { width: 45, height: 45, name: 'thumbnail'}
        ];

        imageType = "png";

        obj = {
            "event":"re-sized",
            "message": {
                "url":"S3://bucketname/images/908798",
                "sizes":["large","medium","small","thumbnail"]
            }
        };

        fakeResponse = {Body: 'image content'};

        fakePutMessage = {messageId: "1223abc"};

        fakeSqsMessage = {BinaryValue: "123"};

        fakeFiles = ["thumbnail-Whatever", "small-Whatever", "medium-Whatever", "large-Whatever"];

        S3getStub.callsArgWith(2, null, fakeResponse);

        rsStub.callsArgWith(4, null);

        readDirFileStub.callsArgWith(1, null, fakeFiles);

        readDirContStub.callsArgWith(2, null, fakeResponse);

        S3putStub.callsArgWith(5, null, fakePutMessage);

        sqsSendStub.callsArgWith(1, null, fakeSqsMessage);

        testedModule.rs(imgName, bucketName, sizesObj, imageType, obj, function () {
            cbSpy.apply(null, arguments);
        });
    });

    after(function () {
        S3._get.restore();
        _resizer.resize.restore();
        read._getContent.restore();
        read._get.restore();
        S3._put.restore();
        _sqs._sendMessage.restore();
    });
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Sinon.stub不存根私有方法

来自分类Dev

使用Sinon存根get方法

来自分类Dev

使用sinon存根原型方法

来自分类Dev

sinon:如何存根实例方法

来自分类Dev

从Sinon.js Stub调用原始函数

来自分类Dev

sinon 存根不工作

来自分类Dev

用Sinon存根React组件方法

来自分类Dev

sinon无法正确恢复存根原型方法?

来自分类Dev

如何使用Sinon存根jQuery方法?

来自分类Dev

在sinon存根中替换多种方法

来自分类Dev

存根使用Sinon进行回调的方法

来自分类Dev

如何使用Sinon存根jQuery方法?

来自分类Dev

sinon无法正确恢复存根原型方法?

来自分类Dev

sinon 存根在 then 调用 promise 中执行的方法

来自分类Dev

如何使用 sinon 存根对象方法?

来自分类Dev

在sinon中存根依赖函数

来自分类Dev

Sinon存根未正确还原

来自分类Dev

Sinon存根不被称为

来自分类Dev

Sinon-如何对要测试的方法调用的方法存根

来自分类Dev

Sinon猫鼬模型的存根保存实例方法

来自分类Dev

如何使用Sinon.js存根动态对象方法?

来自分类Dev

在回调中使用方法的Sinon加密存根

来自分类Dev

sinon中具有异步回调的存根方法

来自分类Dev

在使用chai和sinon的方法中存根诺言

来自分类Dev

如何使用 sinon 在被测函数中存根类方法?

来自分类Dev

从另一个文件调用 Sinon 存根方法

来自分类Dev

我如何sinon.stub带回调的嵌套方法?

来自分类Dev

我如何sinon.stub带回调的嵌套方法?

来自分类Dev

用sinon模拟/存根猫鼬findById