Programatically spin up a new mongo instance and easily start a test with a clean db
Works on all platforms due to mongodb-prebuilt
npm install --save test-with-mongo
Import test-with mongo and create a new class instance. The only needed param is the port to run on, which is defaulted to 27017
require('mocha');
const chai = require('chai');
const { TestWithMongo } = require('./dist');
const MongoClient = require('mongodb').MongoClient;
const { expect } = chai;
const PORT = 26016;
describe('test with mongo tests!', () => {
const testDoc = { val: 1 };
const insertDoc = () => collection.insert(testDoc);
const getDoc = () => collection.findOne(testDoc);
const testWithMongo = new TestWithMongo(PORT);
const DB_NAME = 'testDb';
let db;
let collection
before(() => {
return testWithMongo.startMongoServer();
});
after(() => {
return testWithMongo.clean();
});
beforeEach(() => {
const connectionString = testWithMongo.getConnectionString(DB_NAME);
return MongoClient.connect(connectionString)
.then((retDb) => db = retDb)
.then(() => db.createCollection('testCollection'))
.then((retCollection) => collection = retCollection)
});
afterEach(() => {
return testWithMongo.dropDb(DB_NAME)
});
it('Can find a document inserted in a fresh test', () => {
return insertDoc()
.then(getDoc)
.then((doc) => expect(doc).not.to.be.null);
});
it('cannot find a document inserted in a previous test', () => {
return getDoc()
.then((doc) => expect(doc).to.be.null);
});
});
port is optional, defaults to 27017
const testWithMongo = new TestWithMongo();
or
const testWithMongo = new TestWithMongo(26016);
returns the connection string for the db 'dbName'
returns a promise that resolves when a new mongod is running
- this will delete the contents of any db that may exist from a previous run
testWithMongo.clean()
is called to start
- this should only be called once before any tests are run
returns a promise that resolves when all mongo data created by test-with-mongo, if any, is deleted
returns a promise that resolves when the db with name dbName is dropped