A utility to stub modules imported with the System.js module loader
JavaScript HTML
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
mocks
.editorconfig
.eslintrc
.gitignore
.npmrc
.travis.yml
LICENSE
README.md
index.js
package.json
system.conf.js
test.html
test.js

README.md

sisyphos

Build Status

A utility to stub modules imported with the System.js module loader.

Installation

npm install --save-dev sisyphos

Usage

Requiring a module with stubbed dependencies happens in three phases:

  1. Declare what dependencies will be stubbed with what
  2. Import and use the module using the stubs
  3. Reset the stubs when you're done

1. Stubbing dependencies

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'
    }
});

2. Importing the module with stubs

sisyphos.require('module/that/uses/deps').then(function(mod) {
    // mod uses the stubbed dependencies
});

3. Resetting the stubs

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

Writing unit tests

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.

Contributing

If you want to run the sisyphos tests suite, clone it locally and run:

npm install
npm test

License

MIT

Acknowledgements

Special thanks to @mroderick for creating bogus, a utility to stub dependencies in Require.js projects.