A utility to stub modules imported with the System.js module loader.
npm install --save-dev sisyphos
Requiring a module with stubbed dependencies happens in three phases:
- Declare what dependencies will be stubbed with what
- Import and use the module using the stubs
- Reset the stubs when you're done
In the example below, depA
and depB
have a single export. This is the case for all AMD and CommonJS modules, and for ES2015 modules which use export default
. Dependencies with multiple named exports are stubbed by providing a value for each export.
sisyphos.stub({
'path/to/depA': 'some value',
'path/to/depB': {
someProperty: 'someValue'
},
'path/to/depWithMultipleNamedExports': {
exportA: 'valueA',
exportB: 'valueB'
}
});
sisyphos.require('module/that/uses/deps').then(function(mod) {
// mod uses the stubbed dependencies
});
Once you are done you can reset the dependencies to their original implementations (whether they were in the registry at the time they were stubbed or not).
sisyphos.reset(); //returns a promise
Sisyphos's promise-based API makes for easy setup and tear-down in unit tests. If you're using Mocha:
beforeEach(function() {
sisyphos.stub({
'some/dep': 'some_default_exported_string'
});
return sisyphos.require('path/to/module');
});
afterEach(function() {
return sisyphos.reset();
});
If your test framework does not support returning promises in tests, you can attach a done
callback to the promises returned by require
/ reset
:
beforeEach(function(done) {
// [declare stubs here]
return sisyphos.require('path/to/module').then(done);
});
afterEach(function(done) {
return sisyphos.reset().then(done);
});
Have a look at the tests file to see how sisyphos can be used with Mocha.
If you want to run the sisyphos tests suite, clone it locally and run:
npm install
npm test
Special thanks to @mroderick for creating bogus, a utility to stub dependencies in Require.js projects.