我正在尝试为异步数据库调用编写单元测试。我正在使用 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
有什么建议吗? 感谢。
答案 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)
。