DEV Community

Rittwick Bhabak
Rittwick Bhabak

Posted on

#5 Saving data to MongoDB

const mocha = require('mocha');
const assert = require('assert');
const MarioChar = require('../models/mariochar');

describe('Some demo tests', function(){

    //Create tests
    it('Saves a record to the database', function(done){
        var character = new MarioChar({
            name: "Mario",
        })
        character.save().then(function(){
            assert(character.isNew === false)
            done();
        })
    })
})
Enter fullscreen mode Exit fullscreen mode
character.save().then(function(){
        assert(character.isNew === false)
        done();
})
Enter fullscreen mode Exit fullscreen mode

The above function saves the character in the database.
character.isNew returns true when the object is created but not present in the database.
and returns false when the object is found in the database.
As save is an asynchronous function, to perform next tests we have to explicitly tell when it is finished through done method.

2. Using ES6 promise instead using mogoose's own promise

const mongoose = require('mongoose');

// Using ES6 promise instead mogoose's promise
mongoose.Promise = global.Promise 

// Connect to mongodb
mongoose.connect('mongodb://localhost/testaroo');
mongoose.connection.once('open', function(){
    ...
}).on('error', function(error){
  ...  
})
Enter fullscreen mode Exit fullscreen mode

At this point our test is being ran even before the connection is established.
To do that we have to put our connection code inside before

before(function(done){
     mongoose.connect('mongodb://localhost/testaroo');
    mongoose.connection.once('open', function(){
        console.log('Conneciton is made');
        done();
    }).on('error', function(error){
        console.log('Connection error', error);
    })
})
Enter fullscreen mode Exit fullscreen mode

Note that we've also used done to explicitly tell when the connection is established.

Top comments (0)