bogus

bogus is a small utility for stubbing dependencies when testing RequireJS based projects
Link Seam
In Working Effectively with Legacy Code, Michael Feathers describes Seams. In the vernacular of that book, bogus
would be considered a Link Seam.
Getting bogus
You can install bogus into your project using either npm
or bower
$ npm install bogus --save-dev
or
$ bower install bogus --save-dev
Usage
define('SteeringWheel', function(){
function SteeringWheel(){
this.color = 'black';
}
return SteeringWheel;
});
define('Car', ['SteeringWheel'], function(SteeringWheel){
function Car(){
this.steeringWheel = new SteeringWheel();
}
Car.prototype.getSteeringWheelColor = function getSteeringWheelColor(){
return this.steeringWheel.color;
};
return Car;
});
define([
'bower_components/bogus/bogus'
], function(
bogus
){
describe('myModule', function{
var Car;
beforeEach(function(done){
var fakeSteeringWheel = function(){
this.color = 'blue';
};
bogus.stub('SteeringWheel', fakeSteeringWheel);
bogus.require('Car', function(module){
Car = module;
done();
});
});
afterEach(function(done){
bogus.reset(done);
});
describe('Car', function(){
describe('getSteeringWheelColor method', function(){
it('should return the actual color of the SteeringWheel', function(){
var car = new Car();
assert.equal(car.getSteeringWheelColor(), 'blue');
});
});
});
});
});
Promises
Both bogus.require
and bogus.reset
return promises. The beforeEach
and
afterEach
in the example above can be written as:
beforeEach(function(){
var fakeSteeringWheel = function(){
this.color = 'blue';
};
bogus.stub('SteeringWheel', fakeSteeringWheel);
return bogus.require('Car').then(function(module){
Car = module;
});
});
afterEach(function(){
return bogus.reset();
});
Stub multiple dependencies
If you're stubbing several dependencies, you can pass a map of them to stub
var firstFake = {};
var secondFake = {};
bogus.stub({
'path/to/first/dependency': firstFake,
'path/to/second/dependency': secondFake
});
Development
You can run the tests with
$ npm test
or with
$ mocha
if you have mocha installed as a global
See also
License
MIT: http://mrgnrdrck.mit-license.org