Dead simple stubbing for JavaScript
I’m writing a lot of JavaScript these days, and for testing I mostly use QUnit. When I need to quickly stub a piece of the code that I’m testing, I like to use the following micro-library. What it does is enable you to replace a bunch of methods on an object with stub versions, in a easily reversible way.
I use RequireJS, but if you don’t, just remove the define and outer function.
define(function() { var stub = function(obj, stubs) { obj._stubbed = obj._stubbed || {}; for (var name in stubs) { obj._stubbed[name] = obj[name]; obj[name] = stubs[name]; } }; stub.restore = function(obj) { if (!obj || !obj._stubbed) return; for (var name in obj._stubbed) { obj[name] = obj._stubbed[name]; } delete obj._stubbed; }; return stub; });
Here is how you would replace two methods bar and baz on an object foo:
stub(foo, { bar: function() { return "stubbed bar"; }, baz: function(glop) { return "stubbed baz " + glop; } });
And here is how you can put everything back in place once you’re done:
stub.restore(foo);
I hope this helps...