2016-03-20 13 views
0

Ich versuche, mit mongo db (3.0.6) auf mehrere Arten Verbindung mit nodejs nativen Treiber zu verbinden. Ich habe gerade angefangen, meine Bewerbung zu schreiben, also ist alles, was ich dort habe, Mongodb und Mokka.MongoClient Callback nie aufgerufen

Was auch immer ich versuche, kann ich nicht zu Callback/Promise Ausführung. Ich weiß, es kann passieren, wenn die Verbindung nicht hergestellt werden kann, aber ich bekomme keine Ausnahme entweder:

Hier sind einige der Möglichkeiten, die ich versucht habe:

it('init with Promise', function() { 
    var MongoClient = require('mongodb').MongoClient, 
     test = require('assert'); 
    console.log("1\n"); 
    //, { server: { auto_reconnect: true } } 
    MongoClient.connect('mongodb://localhost:27017/session').then(function (db) { 
     // This line is never called 
     console.log("2\n"); 
     // Get the collection 
     var col = db.collection('insert_many_with_promise'); 
     col.insertMany([{a: 1}, {a: 2}]).then(function (r) { 
      console.log("3\n"); 
      test.equal(2, r.insertedCount); 
      // Finish up test 
      db.close(); 
     }); 
    }).catch(function (error) { 
     console.info(error); 
    }); 
}) 


    it('init db', function() { 
    var MongoClient = require('mongodb').MongoClient; 
    var assert = require('assert'); 
    var ObjectId = require('mongodb').ObjectID; 
    var url = 'mongodb://localhost:27017/test'; 

    var insertDocument = function (db, callback) { 
     db.collection('restaurants').insertOne({ 
      "address": { 
       "street": "2 Avenue", 
       "zipcode": "10075", 
       "building": "1480", 
       "coord": [-73.9557413, 40.7720266] 
      }, 
      "borough": "Manhattan", 
      "cuisine": "Italian", 
      "grades": [ 
       { 
        "date": new Date("2014-10-01T00:00:00Z"), 
        "grade": "A", 
        "score": 11 
       }, 
       { 
        "date": new Date("2014-01-16T00:00:00Z"), 
        "grade": "B", 
        "score": 17 
       } 
      ], 
      "name": "Vella", 
      "restaurant_id": "41704620" 
     }, function (err, result) { 
      assert.equal(err, null); 
      console.log("Inserted a document into the restaurants collection."); 
      callback(); 
     }); 
    }; 

EDIT: mongodb Treiberversion : "mongodb": "^ 2.1.4"

Antwort

0

Ihr Test ist abgeschlossen, bevor die asynchronen Aufrufe abgeschlossen wurden. Fügen Sie den getan Rückruf (siehe Testen asynchronen Code in Mocha) als Parameter:

it('init with Promise', function (done) { 
    var MongoClient = require('mongodb').MongoClient, 
     test = require('assert'); 
    console.log("1\n"); 
    //, { server: { auto_reconnect: true } } 
    MongoClient.connect('mongodb://localhost:27017/session').then(function (db) { 
     // This line is never called 
     console.log("2\n"); 
     // Get the collection 
     var col = db.collection('insert_many_with_promise'); 
     col.insertMany([{a: 1}, {a: 2}]).then(function (r) { 
      console.log("3\n"); 
      test.equal(2, r.insertedCount); 
      // Finish up test 
      db.close(); 
      done(); 
     }); 
    }).catch(function (error) { 
     console.info(error); 
     done(error); 
    }); 
}); 
+0

Danke, Maurits! Es hat wie ein Zauber funktioniert. Aber es gibt immer noch ein Konzert, das mich nervt. Mein Beispiel war sehr grundlegend, aber was ist, wenn alle meine Versprechen tatsächlich in einem anderen Modul sind, für das ich einen Komponententest schreibe? Die letzte Sache, die ich machen möchte, besteht darin, den Rückruf in meine Geschäftslogik zu übernehmen. – yuranos87

Verwandte Themen