2012-05-27 4 views
0

Я пробовал все, что мог, и я искал Google и нашел несколько примеров, я пробовал примеры и не испытывал радости. Я действительно застрял сейчас. Итак, у меня есть mongodb на моем Mac, который я установил через варево. Это было хорошо. Я запускаю сервер «mongod», и он тоже прошел хорошо. Я вставляю некоторые данные о mongo interactive, которые вы можете видеть ниже, когда я извлекал данные. У меня есть имя базы данных «тест» и сборник «тест»Mongoose не будет извлекать данные из существующей базы данных, node.js

 

> db.test.find() 
{ "_id" : ObjectId("4fc27535a36ea778dd6cbdf4"), "a" : "1" } 
{ "_id" : ObjectId("4fc27557a36ea778dd6cbdf5"), "Ich" : "I" } 
 

Теперь, когда я создаю простой тест мокко с мангустом с этим кодом.

 

var Vocabulary = function() { 

    function get(german_vocab) { 
     var mongoose = require("mongoose"); 
     mongoose.connect('mongodb://localhost:27017/test'); 
     mongoose.connection.on("open", function(){ 
      console.log("mongodb is connected!!"); 
     }); 

     mongoose.connection.db.collection("test", function (err, collection) { 
      collection.find().toArray(function(err, results) { 
       console.log(results); 
      }); 
     }); 
    } 

    return { 
     get : get 
    }; 
} 

module.exports = Vocabulary; 
 

И это мой мокко тест

 

var should = require('should'); 
var Vocabulary = require('../modules/vocabulary'); 

describe("Vocabulary", function() { 
    it("should get a translation of Ich", function() { 
     var vocabulary = Vocabulary(); 
     vocabulary.get("Ich"); 
    }); 
}); 
 

Это то, что я получаю от Мокко

 


    Vocabulary 
    ✓ should get a translation of Ich (161ms) 


    ✔ 1 test complete (163ms) 

 

Как вы можете видеть это не всегда печатать «MongoDB подключен!» и по методу find() он также ничего не печатает.

Пожалуйста, помогите мне. Огромное спасибо.

ответ

4

Я думаю, что основная проблема заключается в том, что вы пытаетесь использовать синхронный подход к асинхронным действиям. Например:

  1. Ваше соединение mongoose с базой данных фактически не открыто до тех пор, пока вы не получите обратный вызов «открытого» события.
  2. Ваш метод get должен возвращать результаты в обратном вызове, который передается в функцию.
  3. Ваш тест мокко должен использовать асинхронный стиль, в котором вы вызываете параметр функции done, который передается в ваш обратный вызов it, когда ваш тест завершен.
+0

Большое спасибо. Оно работает!!! – toy

Смежные вопросы