每当我在IDE或控制台中运行nodeunit测试时,它运行良好但无法退出。请帮帮我!
var store = require('../lib/db');
var list = require('../source/models/mock_deals');
var logger = require('../lib/logging').logger;
exports.setUp = function(done){
logger.info('start test...');
done();
};
exports.tearDown = function(done){
logger.info('end test...');
done();
};
exports.testInsertDeal = function(test){
var length = list.length;
test.equals(length, 2);
store.mongodb.open(function(err,db){
if(err){
logger.error(err);
return;
}
logger.info("mongodb is connected!");
db.collection('deals',function(err,collection){
for(var i=0; i<length; i++){
var item = list[i];
collection.insert(item, function(err, result){
if(err){
logger.error('Fail to insert document deal [' + item.id + ']');
return;
}
logger.info( 'index ' + i + ' : ' +JSON.stringify(item) );
});
}
});
test.expect(1);
});
test.done();
};
答案 0 :(得分:2)
我改为使用 mongoose 而不是 mongodb 。测试仍无法自动退出。
但是当我在 nodeunit 测试中以test.tearDown
方法断开mongoose时。测试存在正确。
在下面添加测试:
exports.tearDown = function(done){
mongoose.disconnect(function(err){
if(err) {
logger.error(err);
return;
}
logger.info('mongoose is disconnected');
});
done();
};
此外,如果我使用 log4js 登录我的测试并使用reloadSecs: 500
配置 log4js ,则测试也不会存在。将reloadSecs
设置为0后,测试就很好了。所以我们需要使用选项reloadSecs: 0
总结一下:在完成所有测试方法后,我们需要确保没有工作部件。然后测试将正确存在。
答案 1 :(得分:0)
如果您知道程序何时退出,只需使用以下代码行退出:
process.exit(0);
其中0是程序的返回码。
现在这并不能解决问题。可能还有一个回叫仍在等待,或者一个仍处于活动状态的连接,保持您的程序正常运行,而这在您在此处发布的代码中未显示。如果您不想找到它,只需使用process.exit。如果你真的想找到它,你将不得不挖掘更多。我从来没有使用过nodeunit但是我已经使用了其他节点库,这些节点库在内部工作中留下了东西,使程序不会退出。在这些情况下,我通常不想涉及其他人的源代码,以了解发生了什么,所以我只是做前面提到的process.exit调用。
至少应该给你一个选择。