2016-04-22 4 views
1

Я пытаюсь проверить async.waterfall, выполняя одну из моих функций, используя Sinon.js.Stubbing async.waterfall с Sinon.JS

// functions.js 
module.exports = { 
    // function I don't want to run 
    doBigThing: function() { 
    console.log("[doBigThing] was called"); 
    }, 

    // function I want to stub 
    myFunction: function(number, callback) { 
    console.log("[myFunction] was called"); 
    doBigThing(); 
    callback(null, number); 
    }, 

    // function I want to test 
    waterfall: function(callback) { 
    return async.waterfall([ 
     async.constant(5), // 5 just for the demo 
     myFunction 
    ], callback); 
    } 
} 

И мой тест:

describe('water', function() { 
    it ('successfully falls', function() { 
    // function under test 
    var waterfall = functions.waterfall; 

    var callback = function(err, number) { 
     expect(err).to.be.null; 
     expect(number).to.equal(5); 
    }; 

    // I would like this stub to run instead of functions.myFunction 
    sinon.stub(functions, 'myFunction', function(number, callback) { 
     console.log("[myFunction] stub was called"); 
     callback(null, number); 
    }); 

    waterfall(callback); 
    // I suppose this is happening: myFunction(5, callback) 
    expect(functions.myFunction.withArgs(5, callback)).to.have.been.called; 
    expect(callback).to.have.been.called; 
    }); 
}); 

Так что тест пройден, но окурок игнорируется, потому что doBigThing называли:

Water 
    ✓ successfully falls 
[myFunction] was called 
[doBigThing] was called 

Вместо этого я хотел бы видеть

Water 
    ✓ successfully falls 
[myFunction] stub was called 

I a м, возможно, упустил что-то, и я был бы признателен за вашу помощь.

ответ

1

Вы гася методом functions объектаmyFunction, но в waterfall методе вы звоните в myFunctionфункцию (я на самом деле не могу запустить свой код в моем окружении, я получаю «ReferenceError: туРипсЫоп не определен «). Так что это должно работать:

// functions.js 
var functions = { 
    // function I don't want to run 
    doBigThing: function() { 
    console.log("[doBigThing] was called"); 
    }, 

    // function I want to stub 
    myFunction: function(number, callback) { 
    console.log("[myFunction] was called"); 
    functions.doBigThing(); // CHANGE HERE 
    callback(null, number); 
    }, 

    // function I want to test 
    waterfall: function(callback) { 
    return async.waterfall([ 
     async.constant(5), // 5 just for the demo 
     functions.myFunction // CHANGE HERE 
    ], callback); 
    } 
}; 

module.exports = functions; 
+0

Я бегу код и я получаю результат, который вы хотите: ✓ успешно падает [туРипсЫоп] окурок был назван – jkondratowicz

Смежные вопросы