sinon.js stub - can you call more than one callback on a single stubbed function?

后端 未结 2 928
温柔的废话
温柔的废话 2021-02-20 06:24

If I have a stub for a function that takes 2 callbacks, how can I wire up sinon.js to call both callbacks when the stubbed function is invoked?

For exam

相关标签:
2条回答
  • 2021-02-20 06:39

    Why don't you skip sinon altogether?

    var obj = { stubMe: function(cb1, cb2) {} };
    var originalMethod = obj.stubMe;
    
    obj.stubMe = function(cv1, cb2) { 
      //Whatever logic you wish
      cb1(); 
      cb2(); 
    }; 
    
    //Do your test
    
    obj.stubMe = originalMethod; //Restore
    

    This way you can even continue to use sinon's APIs, if you wish:

    var stub = sinon.stub();
    obj.stubMe = function(cb1, cb2) { 
      stub.apply(stub, arguments);
      //Rest of whatever logic you wanted here
    };
    
    obj.stubMe();
    expect(stub.calledOnce()).to.be(true); //That would pass
    

    What'd you think?

    0 讨论(0)
  • 2021-02-20 06:40

    This is not a classic scenario, since not many methods would call two methods sequentially, and I guess thats why it isn't supported. But, be calm, the solution is easy:

    var subject = { 
        method: function(one, two) {} 
    };
    
    var stub = sinon.stub(subject, 'method', function(one, two) { 
        one(); 
        two(); 
    });
    
    subject.method(
        function() { console.log('callback 1'); }, 
        function() { console.log('callback 2'); });
    

    Side note: This also gives the option for choosing if one or two should be called first.

    0 讨论(0)
提交回复
热议问题