1.2.0 • Published 5 years ago

mongodb-mocker v1.2.0

Weekly downloads
8
License
MIT
Repository
github
Last release
5 years ago

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('../index');
const yourDatabase = new Db();
const mongodbMocker = new MongodbMocker({ port: '8000' });

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

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

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

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

  // Tests here that use your database client connected to `localhost:8000/yourDatabaseName`

});

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('../index');

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