挂钩未执行前后的摩卡

时间:2015-05-19 17:29:52

标签: node.js mocha

我正在尝试在我的本地cassandra数据库上运行一个简单的测试来检查select语句是否从表中返回正确的no记录。但是,之前和之后的块之间的代码不会被调用。结果我的测试失败了。

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', 'mick1@company.com']
        },
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger2', 'Sir Mick Jagger 2', 'mick2@company.com']
        },
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger3', 'Sir Mick Jagger 3', 'mick3@company.com']
        },
        {
        query: 'INSERT INTO users(key, name, emails) VALUES (?, ?, ?)',
        params: ['mick-jagger4', 'Sir Mick Jagger 4', 'mick4@company.com']
        }
        ];

        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);
            }
        });
    })
})

2 个答案:

答案 0 :(得分:3)

您的测试正在执行异步操作。您需要使用回调来告诉mocha何时/之前/之后的函数。例如:

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();
        });
});

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();
    });
});

答案 1 :(得分:0)

ES6更新

您现在可以在这种情况下使用异步/等待模式:

before(async () => {
        // ...
        try {
         await client.batch(queries, {
            prepare: true
          });
        } catch (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', async () => {
      var count = 0;
      await client.execute('SELECT COUNT(*) FROM users', (err, result) => { 
       count = result.rows[0];
        assert.equal(4, count);
        console.log("I am here : " + count);
      });
    });