Package detail

mock-mongoose

CSTLeagueORG1.1kMITdeprecated8.0.1-a

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

MockMongoose is an in memory database mock to allow for testing of applications that rely on Mongoose.

mongodb, mongoose, datastore, nosql

readme

What is MockMongoose?

Build Status

MockMongoose provides test database by spinning up mongod on the back when mongoose.connect call is made. By default it is using in memory store which does not have persistence.

Install

To install the latest official version, use NPM:

npm install mock-mongoose --save-dev

Usage

You simply require Mongoose and MockMongoose and wrap Mongoose with MockMongoose.

var mongoose = require('mongoose');
var MockMongoose = require('mock-mongoose').MockMongoose;
var mockMongoose = new MockMongoose(mongoose);

mockMongoose.prepareStorage().then(function() {
    // mongoose connection        
});

Once Mongoose has been wrapped by MockMongoose connect() will be intercepted by MockMongoose so that no MongoDB instance is created.

Mocha

Default mocha timeout is 2000ms, change it to two minutes.

mocha --timeout 120000

Same can be done by creating 'mocha.opts' file in your test directory with "--timeout 120000" entry.

Example

var Mongoose = require('mongoose').Mongoose;
var mongoose = new Mongoose();

var MockMongoose = require('mock-mongoose').MockMongoose;
var mockMongoose = new MockMongoose(mongoose);

before(function(done) {
    mockMongoose.prepareStorage().then(function() {
        mongoose.connect('mongodb://example.com/TestingDB', function(err) {
            done(err);
        });
    });
});

describe('...', function() {
    it("...", function(done) {
        // ...
        done();
    });
});

ES6 Example without mocha

import * as mongoose from 'mongoose';
import { MockMongoose } from 'mock-mongoose';

let mockMongoose: MockMongoose = new MockMongoose(mongoose);

mockMongoose.prepareStorage().then(() => {
    mongoose.connect('mongodb://foobar/baz');
    mongoose.connection.on('connected', () => {  
      console.log('db connection is now open');
    }); 
});

Helper methods and variables (mockMongoose.helper)

reset(callback)

Reset method will remove ALL of the collections from a temporary store, note that this method is part of mock-mongoose object, and not defined under mongoose

mockMongoose.helper.reset().then(() => {
    done()
});

isMocked

Returns TRUE from mongoose object if MockMongoose is applied

if ( mockMongoose.helper.isMocked() === true ) {
  // mongoose object is mocked
}

setDbVersion(mongoDBVersion: string)

Set version of MongoDB release

import * as mongoose from 'mongoose';
import { MockMongoose } from 'mock-mongoose';

let mockMongoose: MockMongoose = new MockMongoose(mongoose);
mockMongoose.helper.setDbVersion("3.2.1");

mockMongoose.prepareStorage().then(() => {
    mongoose.connect('mongodb://foobar/baz');
    mongoose.connection.on('connected', () => {  
      console.log('db connection is now open');
    }); 
});

setProxy(proxy: string)

Set proxy for downloading MongoDB release

import * as mongoose from 'mongoose';
import { MockMongoose } from 'mock-mongoose';

let mockMongoose: MockMongoose = new MockMongoose(mongoose);

let proxy: string = process.env.http_proxy || 'http://example.com:8080';
mockMongoose.helper.setProxy(proxy);

mockMongoose.prepareStorage().then(() => {
    mongoose.connect('mongodb://foobar/baz');
    mongoose.connection.on('connected', () => {  
      console.log('db connection is now open');
    }); 
});

Development

This section contains instructions for developers working on the MockMongoose codebase. It is not relevant if you just want to use MockMongoose as a library in your project.

Pre-requisites

  • Node.js >= 4

Setup

git clone git@github.com:CSTLeagueORG/MockMongoose.git
cd MockMongoose
npm install
npm test

changelog

Version Description
5.0.4 Updated mongodb-prebuilt dependency, which pudated mongodb-download dependency, which updated getos dependency versions, that fixed identification of Fedora releases
5.0.6 Updated mongodb-prebuilt, that fixes issue with SUSE 11
5.0.9 Updated mongodb-prebuilt, and added disconnected event listener, that calls database shutdown function now if mongoose.disconnect is called, and removed async dependency
5.0.10 Merged fix that allows reconnect after disconnect is made
5.0.11 Added fix for reset method, which was broken after removal of async, updated documentation with reset method
5.1.0 Added unmock and unmockAndReconnect functions
6.0.0 Removed support for 0.10 nodeJS and changed mock interface to utilize promises, to avoid race conditions
8.0.0 Refactored with async/await