gpt4 book ai didi

node.js - Rethinkdb 与 Nodejs 和 Expresso

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:17 24 4
gpt4 key购买 nike

我正在尝试使用 rethinkdb 并通过 expresso 进行测试。我有功能

module.exports.setup = function() {
var deferred = Q.defer();
r.connect({host: dbConfig.host, port: dbConfig.port }, function (err, connection) {
if (err) return deferred.reject(err);
else deferred.resolve();
});
return deferred.promise;
});

我正在这样测试

  module.exports = {
'setup()': function() {
console.log("in setup rethink");

db.setup().then(function(){
console.log(clc.green("Sucsessfully connected to db!"));
}).catch(function(err){
console.log('error');
assert.isNotNull(err, "error");
});

}
};

我正在运行这样的代码

expresso db.test.js 

但是即使出现错误,expresso也会显示错误100% 1测试。我尝试将 throw err; 放入 catch 中,但没有任何变化。

但是如果我将 assert.eql(1, 2, "error"); 放在 setup() 的开头,它会按预期失败;

有什么东西可以缓存错误吗?我怎样才能让它失败呢?对于 squalize 我发现

Sequelize.Promise.onPossiblyUnhandledRejection(function(e, promise) {
throw e;
});

rethink db 有类似的东西吗?

最佳答案

问题在于该测试是异步的,而您将其视为同步测试。您需要执行以下操作:

  module.exports = {
'setup()': function(beforeExit, assert) {
var success;
db.setup().then(function(){
success = true;
}).catch(function(err){
success = false;
assert.isNotNull(err, "error");
});

beforeExit(function() {
assert.isNotNull(undefined, 'Ensure it has waited for the callback');
});
}
};

Mocha 与 Express

您应该考虑查看 mocha.js ,它通过传递 done 函数为异步操作提供了更好的 API。相同的测试如下所示:

  module.exports = {
'setup()': function(done) {
db.setup().then(function(){
assert.ok(true);
}).catch(function(err){
assert.isNotNull(err, "error");
})
.then(function () {
done();
});
}
};

promise

您编写的第一个函数可以按以下方式重写,因为默认情况下,RethinkDB 驱动程序会返回所有操作的 promise 。

module.exports.setup = function() {
return r.connect({host: dbConfig.host, port: dbConfig.port });
});

关于node.js - Rethinkdb 与 Nodejs 和 Expresso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30848573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com