« Back to Index

Better Mocking using RequireJS’ undef method to unset redefined modules

View original Gist on GitHub

DependencyHelper.js

define(['require'], function(require) {
    var stubbed = [];
    return {
        stub: function(name, implementation) {
            stubbed.push(name);
            requirejs.undef(name);
            define(name, [], function() {
                return implementation;
            });
        },
        loadWithCurrentStubs: function(name, callback) {
            requirejs.undef(name);
            stubbed.push(name);
            require([name], callback);
        },
        reset: function() {
            stubbed.forEach(function(name) {
                requirejs.undef(name);
            });
            stubbed = [];
        }
    };
});

Example.js

beforeEach(function () {
    DependencyHelper.stub('name', implementation);

    DependencyHelper.stub('deviceInspector', {
        getGroup: function () {},
        getType: function () {}
    });

    DependencyHelper.loadWithCurrentStubs('module/base', function (base) {
        // code
    });
});

afterEach(function () {
    DependencyHelper.reset();
});