2

我正在尝试为异步数据库调用编写单元测试。我正在使用带有ORMnomnom包的NodeJS ,安装为 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 must finish here!' 'testSomething'(意味着 test.done() 到达回调函数内部)但测试没有完成。我需要手动停止它,得到:'进程完成,退出代码 1'。如果我更改为 test.ok(false,""),那么我会得到 AssertionError 但测试也没有完成。如果我删除“test db”并只留下 testSomething 函数 - 测试按预期完成,所有断言都通过了。

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

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

有什么建议么?谢谢。

4

2 回答 2

2

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

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

exports.tearDown = function (callback) {
    mongoose.disconnect(callback);
};
于 2012-12-30T03:30:40.820 回答
0

我在 nodeunit 和 q/mongoose 上遇到了类似的问题 -已经为它打开了一个错误。process.exit(0)在调用 后尝试做可怕的事情test.done(),但是任何待处理的日志都可能不会被刷新,所以它并不理想。最终不得不调用process.exit(0)超时块。

于 2012-12-30T02:52:50.927 回答