首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rethinkdb与nodejs和expresso

Rethinkdb与nodejs和expresso
EN

Stack Overflow用户
提问于 2015-06-15 15:04:17
回答 1查看 170关注 0票数 1

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

代码语言:javascript
复制
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;
});

我是这样测试的

代码语言:javascript
复制
  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");
        });

    }
  };

我正在运行这样的代码

代码语言:javascript
复制
expresso db.test.js 

但是,即使在出现错误的情况下,表现式也会显示error 100% 1 tests。我试图将throw err;放在catch中,但是没有什么改变。

但是,如果我把assert.eql(1, 2, "error");放在setup()的起点上,它就会像预期的那样失败;

有什么东西能隐藏错误吗?我怎样才能让它失败呢?对于squalize我找到了

代码语言:javascript
复制
Sequelize.Promise.onPossiblyUnhandledRejection(function(e, promise) {
    throw e;
});

有这样的东西可以重新思考吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 17:23:10

问题是,这个测试是异步的,您正在将它作为一个同步测试来处理。您需要执行以下操作:

代码语言:javascript
复制
  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 vs Express

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

代码语言:javascript
复制
  module.exports = {
    'setup()': function(done) {
        db.setup().then(function(){
            assert.ok(true);
        }).catch(function(err){
            assert.isNotNull(err, "error");
        })
        .then(function () {
            done();
        });
    }
  };

承诺

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

代码语言:javascript
复制
module.exports.setup = function() {
    return r.connect({host: dbConfig.host, port: dbConfig.port });
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30848573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档