2013-08-01 41 views
0

退出每当我运行IDE或控制台我nodeunit测试,它运行良好,但无法退出。请帮助我吧!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(); 
}; 

回答

2

我改为使用猫鼬而不是mongodb。测试仍然无法自动退出。

但是,当我在nodeunit测试断开猫鼬在test.tearDown方法。测试存在正确。

下方添加在您的测试:

exports.tearDown = function(done){ 
    mongoose.disconnect(function(err){ 
     if(err) { 
      logger.error(err); 
      return; 
     } 
     logger.info('mongoose is disconnected'); 
    }); 
    done(); 
}; 

多,如果我使用log4js用于记录在我的测试和配置log4jsreloadSecs: 500,测试也不会存在。在将reloadSecs设置为0后,测试就很好地存在。因此,我们需要与选项reloadSecs: 0

总结配置logging.json:我们需要确保没有工作部件有所有的测试方法完成之后。那么测试会正确存在。

+2

在断开连接的回调中调用done()会不会更好?然后你可以确定断开连接完成。 –

+0

是的!关闭数据库连接! – wilco

0

如果你知道当你的程序应该退出,你可以简单地使用下面的代码行退出:

process.exit(0); 

其中0是程序的返回码。

现在是不是真的解决了这个问题。有可能是一个回调仍在等待或仍处于活动状态保持你的程序启动和运行未在您张贴在这里的代码所示的连接。如果您不在意找到它,请使用process.exit。如果你真的很想找到它,你将不得不挖掘更多。我从来没有使用过nodeunit,但我已经使用了其他节点库,这些节点库在内部工作中留下了一些东西,以防止程序退出。在这种情况下,我通常不喜欢通过其他民族的源代码涉水找出什么是对,所以我只是做上述提到的process.exit电话去。

这至少应该给你一个选择。

+0

你的答案提醒我。测试完成后,我的测试中仍有一些工作代码。 –