1

を介して使用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 は表示error 100% 1 testsされます。を入れてみましたthrow err;catch、何も変わりません。

assert.eql(1, 2, "error");しかし、最初に入れると、setup()期待どおりに失敗します。

エラーをキャッシュするものはありますか?どうすれば失敗するようにできますか?見つけsqualizeたから

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

データベースを再考するためにこのようなものはありますか?

4

1 に答える 1

3

問題は、このテストが非同期であり、同期テストとして扱っていることです。次のことを行う必要があります。

  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');
        });
    }
  };

モカ vs エクスプレス

関数を渡すことにより、非同期操作用のはるかに優れた API を備えたmocha.jsを検討することを検討する必要がありdoneます。同じテストは次のようになります。

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

約束

最初に作成した関数は、次のように書き直すことができます。これは、RethinkDB ドライバーが既定ですべての操作に対して promise を返すためです。

module.exports.setup = function() {
    return r.connect({host: dbConfig.host, port: dbConfig.port });
});
于 2015-06-15T17:23:10.063 に答える