Переосмысление с помощью nodejs и expresso

Я пытаюсь использовать 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 

Но экспресс-шоу error 100% 1 tests даже в случае ошибки. Я пытался поставить throw err; в catch, но ничего не меняется.

Но если я поставлю assert.eql(1, 2, "error"); в начале setup() это терпит неудачу как ожидалось;

Есть ли что-то, что кеширует ошибки? Как я могу заставить его потерпеть неудачу, как это должно быть? За squalize я нашел

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

Есть ли что-то подобное для переосмысления БД?

1 ответ

Решение

Проблема в том, что этот тест является асинхронным, и вы рассматриваете его как синхронный тест. Вам нужно сделать следующее:

  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.js, который имеет гораздо более приятный API для асинхронных операций, передавая done функция. Тот же тест будет выглядеть так:

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

обещания

Первую написанную вами функцию можно переписать следующим образом, поскольку драйвер RethinkDB по умолчанию возвращает обещание для всех операций.

module.exports.setup = function() {
    return r.connect({host: dbConfig.host, port: dbConfig.port });
});
Другие вопросы по тегам