Reputation: 1067
I write a unit-test for doB
function of my module.
I want to stub the function doA
without exporting it, I prefer not change the way doB
accesses doA
.
I understand that it cannot be simply stub
ed because it isnt in the exported object.
How do I stub doA
(sinon
or any other tool?)
function doA (value) {
/* do stuff */
}
function doB (value) {
let resultA = doA(value);
if (resultA === 'something') {
/* do some */
} else {
/* do otherwise */
}
}
module.exports = exports = {
doB
}
Upvotes: 10
Views: 6522
Reputation: 2554
Actually, if you don't care about fetching the original function, but rather just want to stub it, the first part is unnecessary. You can do something like this instead:
function stubPrivateMethod(modulePath, methodName) {
const module = rewire(modulePath);
const stub = sinon.stub();
module.__set__(methodName, stub);
return stub;
}
Upvotes: 1
Reputation: 1460
I did it using rewire too. This is what I came up with
const demographic = rewire('./demographic')
const getDemographicsObject = { getDemographics: demographic.__get__('getDemographics') };
const stubGetDemographics = sinon
.stub(getDemographicsObject, 'getDemographics')
.returns(testScores);
demographic.__set__('getDemographics', stubGetDemographics);
Hope this helps
Upvotes: 3