I have a function called connectToMongo that connects to a locally-running mongodb database myapp. I have another function which invokes connectToMongo. I would like to test this other function with mocha. However, I would like to make it so that, while testing, any calls to connectToMongo will automatically connect to my myapp_test database instead of my normal one.
Ideally (I think) I'd like to do something like this (where connectToMongoTestingDatabase connects to myapp_test):
var connectToMongo = require('./connectToMongo'),
    connectToMongoTestingDatabase = require('./connectToMongoTestingDatabase')
    registerUser = require('./registerUser');
testingLibrary.configureAlternateBehavior(connectToMongo, connectToMongoTestingDatabase);
it('should register a user', function (done) {
    registerUser({name: 'bob', password: 'password1'}, function (error, response) {
        connectToMongoTestingDatabase(function (error, database) {
            database.collection('users').findOne({name: 'bob'}, function (error, user) {
                expect(user).not.to.be.null;
                done();
            });
        });
    });
});
I have been trying to make sense of the Sinon.JS library. I can't tell whether spies, stubs or mocks would fulfill this need, nor what the equivalent of testingLibrary.configureAlternateBehavior would be.
I suppose I could also create some global variable called global.MYAPP_TESTING, set that to true before I start my tests, and in the implementation of connectToMongo I could connect to the myapp_test database if global.MYAPP_TESTING is true. That seems bad though.
What is the best way to substitute the behavior of one function for another in JavaScript unit testing?
 
     
     
    