rewire icon indicating copy to clipboard operation
rewire copied to clipboard

How to use rewire to mock dependencies of nested exports

Open kevindashgit opened this issue 5 years ago • 0 comments

I created SO post about this here: https://stackoverflow.com/questions/55976172/how-to-use-rewire-to-mock-dependencies-of-nested-exports

But maybe it makes more sense to post this question here.

// a.js
var evil = require('evil');
module.exports = () => { evil.castCurse(); };
// b.js
var Evil = require('evil');
module.exports = () => { Evil.castCurse(); };
// main.js
var a = require('a.js');
var b = require('b.js');
module.exports = { a, b };

So my question here is - how can I employ a shim over both evil and Evil if I load main-spec.js as:

// main-spec.js
var rewire = require('rewire'),
    main = rewire(../../../main.js');

main.__set__('Evil', {});
main.__set__('evil', {});

Would I have to do something closer to this?

// main-spec.js
var rewire = require('rewire'),
    main = rewire(../../../main.js');

main.__get__('a').__set__('evil', { castCurse: () => { console.log('lucky a!'); }});
main.__get__('b').__set__('Evil', { castCurse: () => { console.log('lucky b!'); }});

kevindashgit avatar May 03 '19 19:05 kevindashgit