Nodeunit测试挂起异步数据库调用ORMnomnom

时间:2012-06-08 16:39:00

标签: javascript unit-testing node.js nodeunit

我正在尝试为异步数据库调用编写单元测试。我正在使用 NodeJS ,将 ORMnomnom 包作为orm db access安装, nodeunit 进行单元测试。 但它仍然适用于这个简单的测试:

这是代码test \ test1.js

modelsdb = require('../model/model_db')

exports['test db'] = function (test) {
  test.expect(1);
  console.log('test db');
  modelsdb.MyTable.objects.all( function (err, data) { 
    test.ok(true, "this assertion should pass"); 
    test.done();
    console.log('test must finish here!');
  });
}

exports.testSomething = function(test){
  console.log('testSomething');
  test.expect(1);
  test.ok(true, "this assertion should pass");
  test.done();
};

当我运行此测试时,所有断言都通过了,我在控制台中看到了我的消息:'test db''test必须在这里完成! 'testSomething'(意味着test.done()到达内部回调函数)但测试没有完成。我需要手动停止它,得到:'处理完成退出代码1'。如果我改为test.ok(false,“”),那么我得到AssertionError,但测试也没有完成。如果我删除'test db'并且只保留testSomething函数 - 测试按预期完成,则所有断言都已通过。

我还尝试 testpilot 包,它基于 nodeunit 。 它给出了

test1
   FAIL : test db
      an error occurred during test:
         Error: timed out waiting for test

有什么建议吗? 感谢。

2 个答案:

答案 0 :(得分:2)

在导出中添加tearDown方法以关闭mongoose的连接池。只要它仍然打开,测试就不会退出。

您没有展示如何打开您的猫鼬连接,但是这样:

exports.tearDown = function (callback) {
    mongoose.disconnect(callback);
};

答案 1 :(得分:0)

我遇到类似nodeunit和q / mongoose的问题 - 已经为它打开了bug。我在调用process.exit(0)之后尝试做了可怕的test.done(),但是任何待处理的日志记录都可能无法刷新,因此它并不理想。结束了必须在超时块中调用process.exit(0)