2015-05-19 97 views
1

我想在我的本地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', '[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); 
      } 
     }); 
    }) 
}) 

回答

3

您的测试正在执行异步操作。当你的it/before/after函数完成时,你需要使用回调来告诉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(); 
    }); 
}); 
+0

值得一提的是,'client.batch'应该叫'client.connect'回调里面,因为'client.connect'是异步的了。或者,您可能最终会在完成连接之前执行查询。 –

+0

谢谢你对回调的一些看法。现在我可以执行之前和之后的部分测试。 – BarryVenom