为什么我对mongodb的nodeunit测试没有完成?

时间:2012-12-20 21:42:18

标签: node.js mongodb nodeunit

我正在为mongodb周围的操作编写nodeunit测试。当我使用nodeunit(nodeunit testname.js)执行我的测试时,测试运行并变为绿色,但nodeunit命令行不返回(我需要点击ctrl-c)。

我做错了什么?我是否需要关闭数据库连接或服务器或我的测试错误?

这是一个缩减样本测试。

process.env.NODE_ENV = 'test';
var testCase = require('/usr/local/share/npm/lib/node_modules/nodeunit').testCase; 
exports.groupOne = testCase({
    tearDown: function groupOneTearDown(cb) {       
    var mongo = require('mongodb'), DBServer = mongo.Server, Db = mongo.Db;
    var dbServer = new DBServer('localhost', 27017, {auto_reconnect: true});
    var db = new Db('myDB', dbServer, {safe:false});

    db.collection('myCollection', function(err, collectionitems) {
            collectionitems.remove({Id:'test'});    //cleanup any test objects
        }); 

    cb();
},
aTest: function(Assert){
    Assert.strictEqual(true,true,'all is well');
    Assert.done();
}
});

迈克尔

2 个答案:

答案 0 :(得分:2)

关闭连接后,请尝试将cb()置于remove()回调中:

var db = new Db('myDB', dbServer, {safe:false});

db.collection('myCollection', function(err, collectionitems) {
    collectionitems.remove({Id:'test'}, function(err, num) {
        db.close();
        cb();
    });
}); 

答案 1 :(得分:0)

cb关闭后(db期间),你需要调用tearDown函数

tearDown: function(cb) {

    // ...
    // connection code
    // ...

    db.collection('myCollection', function(err, collectionitems) {
        // upon cleanup of all test objects
        db.close(cb);
    });
}

这适合我。