Skip to content

Simple class to manage an in-memory mongodb database for tests or local application

License

Notifications You must be signed in to change notification settings

alexandresobolevski/mongodb-mocker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MONGODB-MOCKER

Build Status Downloads

The package mongodb-mocker is a class that abstracts an in-memory mongodb database. Its purpose is to aid developing of tests that use the mongodb database without writing a mock or connecting to a real database.

Installation

npm install --save-dev mongodb-mocker

Basic Usage

const MongodbMocker = require('mongodb-mocker');
const yourDatabaseClient = new Db();
const mongodbMocker = new MongodbMocker({ port: '8000' });

describe('Your tests', () => {
  before(() => mongodbMocker.start());

  // yourDatabaseClient should connect to 'localhost:8000/yourDatabaseName'
  beforeEach(() => yourDatabaseClient.initialize());

  // make sure to clean up your client
  afterEach(() => yourDatabaseClient.shutDown());

  after(() => mongodbMocker.shutDown());

  // Tests here that use your database client

});

Using with Mongoose

in Names.js

const mongoose = require('mongoose');

const schema = new mongoose.Schema({
  name: {
    type: String,
    max: [50, 'Name too long (>50)'],
    min: 1,
    required: true,
  },
});

const Names = mongoose.model('names', schema);

module.exports = Names;

in db.js

const mongoose = require('mongoose');

class Db {
  constructor() {
    this.mongoose = mongoose;
    this.mockedServer = null;
  }

  shutDown() {
    return this.mongoose.disconnect((e) => {
      if (e) { Promise.reject(e); }
      return Promise.resolve();
    });
  }

  initialize(dbName) {
    const url = process.env.MONGODB_URL;
    this.uri = `mongodb://${url}/${dbName}`;
    return Promise.resolve()
      .then(() => this.mongoose.connect(this.uri, (err) => {
        if (err) { return Promise.reject(err); }
        return Promise.resolve(this.mongoose.createConnection(this.uri));
      }))
      .then(conn => Promise.resolve(conn.connections[0]));
  }
}

module.exports = Db;

in db.spec.js

/* global describe it before beforeEach afterEach */
process.env.NODE_ENV = 'test';
process.env.MONGODB_URL = 'localhost:8000';

const chai = require('chai');
const Db = require('./db');
const Names = require('./Names');
const MongodbMocker = require('mongodb-mocker');

const should = chai.should();
const db = new Db();

describe('Db class', () => {
  before(() => {
    const mongodbMocker = new MongodbMocker({ port: '8000' });
    return mongodbMocker.start();
  });

  beforeEach(() => db.initialize());

  afterEach(() => db.shutDown());

  it('can save a Names record in test mode', () => Names
    .insertMany([{ name: 'MyName' }])
    .then(res => Names.findById(res[0]._id))
    .then((res) => {
      should.exist(res);
      res.should.be.an('object');
      res.name.should.equal('MyName');
    }));
});

Run this example from the root of this repository

npm i
mocha ./example/db.spec.js

About

Simple class to manage an in-memory mongodb database for tests or local application

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published