Bootstrap programmatically Mongodb for testing or mocking during development.
Works on all platforms which is due to the awesome mongodb-prebuilt package.
npm install mongo-memory
const MongoInMemory = require('mongo-memory')
const port = 8000
const dbPath = "./tempb/.data" // Mongodb placed some metadata
const mongoServerInstance = new MongoMemory(port, dbPath)
mongoServerInstance.start().then(server) => {
mongoServerInstance.getMongouri('myDatabaseName')
mongoServerInstance.getCollection('coll1')
mongoServerInstance.getDocumentById('myDatabaseName', 'coll1', "<id>")
mongoServerInstance.addDocument('myDatabaseName', 'coll1', { _id : "foo" })
mongoServerInstance.addDirectoryOfCollections('myDatabaseName', '<path>')
mongoServerInstance.mongodb.ObjectId // Mongodb driver
mongoServerInstance.serialize // EJSON
mongoServerInstance.deserialize // EJSON
})
mongoServerInstance.stop()
$ npm run test
- PR Pending: Newer mongodb versions aren't correctly detected as started mongodb-js/mongodb-prebuilt#40
- PR Pending: Due to a wrong protocol there are some issue to download the offical mongodb server mongodb-js/mongodb-download#31
You can use the EJSON format to express BSON Types with JSON e.g ObjectId, Date.
{
"_id" : {
"$oid": "ec939793b7d8fe8f9f2aa707"
},
'last_seen_at': {
'$date': 1405266782008
}
}
Mongodb storageEngine ephemeralForTest is used. The connection is created by the official mongodb package.
Most code was copied from mongo-in-memory but with significant improvements:
- Don't save metadata in node_modules
- Don't generate random folders
- Clean up of metadata must be handled by user
- 100% Promise API
- Support for BSON Types via EJSON
- Update mongodb-prebuilt to the newest version
- Update dependencies and tests
- Gracefully shutdown Mongodb when execute stop
- Create recursively databasePath