Search code examples
node.jsunit-testingsinon

Sinon function stubbing: How to call "own" function inside module


I am writing some unit tests for node.js code and I use Sinon to stub function calls via

var myFunction = sinon.stub(nodeModule, 'myFunction');
myFunction.returns('mock answer');

The nodeModule would look like this

module.exports = {
  myFunction: myFunction,
  anotherF: anotherF
}

function myFunction() {

}

function anotherF() {
  myFunction();
}

Mocking works obviously for use cases like nodeModule.myFunction(), but I am wondering how can I mock the myFunction() call inside anotherF() when called with nodeModule.anotherF()?


Solution

  • You can refactor your module a little. Like this.

    var service = {
       myFunction: myFunction,
       anotherFunction: anotherFunction
    }
    
    module.exports = service;
    
    function myFunction(){};
    
    function anotherFunction() {
       service.myFunction(); //calls whatever there is right now
    }