Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mocha before and after hooks not executing

I am trying to run a simple test on my local cassandra database to check if the select statement returns the correct no of records from the table. However, the code placed between the before and after blocks are not getting called. As a result my test simply fails.

var assert = require('assert');
var cassandra = require('cassandra-driver');
var async = require('async');

//Connect to the cassandra cluster, assuming that the keyspace & columnspace already exists
var client = new cassandra.Client({contactPoints: ['127.0.0.1'], keyspace: 'demo'}); 
describe('Cassandra is up and running', function() {
    before(function() {
        //Check if the connection got established successfuly 
        client.connect(function(err) {
            if(err){
                console.log("Oops, something went wrong : " + err);
            }
            console.log('I al here 1');
        });

        //Insert a few data to column space
        var queries = [
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger1', 'Sir Mick Jagger 1', '[email protected]']
        },
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger2', 'Sir Mick Jagger 2', '[email protected]']
        },
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger3', 'Sir Mick Jagger 3', '[email protected]']
        },
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger4', 'Sir Mick Jagger 4', '[email protected]']
        }
        ];

        client.batch(queries, { prepare: true }, function(err) {
            if(err){
                console.log("Oops, something went wrong : " + err);
            }
            console.log('Sample data inserted into column space');
        });
    })

    it('should return 4 when four rows of data are inserted into demo table', function() {
        var count = 0;
        client.execute('SELECT COUNT(*) FROM users', function(err, result) {
            count = result.rows[0];
        });
        assert.equal(4, count);
        console.log("I am here : " + count);
    })

    after(function() {
        client.execute('TRUNCATE users', function(err, result) {
            if(err){
                console.log("Oops, something went wrong : " + err);
            }
        });
    })
})
like image 203
BarryVenom Avatar asked Sep 15 '25 13:09

BarryVenom


1 Answers

Your test is performing asynchronous operations. You need to use a callback to tell mocha when your it/before/after functions have finished. For example:

before(function(done) {
    // ...
    client.batch(queries, {
        prepare: true
    }, function(err) {
            if (err) {
                console.log("Oops, something went wrong : " + err);
            }
            console.log('Sample data inserted into column space');
            done();
        });
});

and:

it('should return 4 when four rows of data are inserted into demo table', function(done) {
    var count = 0;
    client.execute('SELECT COUNT(*) FROM users', function(err, result) {
        count = result.rows[0];
        assert.equal(4, count);
        console.log("I am here : " + count);
        done();
    });
});
like image 182
Andrew Lavers Avatar answered Sep 18 '25 09:09

Andrew Lavers