2017-09-26 85 views
1

我是比較新的Node.js的嘗試使用mocha框架和mongodb驅動程序來測試與mongodb的連接。MongoClient.connect不執行回調函數

Node.js的版本 - 6.11.3

MongoDB的驅動程序版本 - 2.2.31

Mondodb版本 - 3.4.7

這是我的js文件:

var should = require("should"); 
var expect = require('chai').expect; 
var cfg = require('../config'); 
var uri = cfg.mongouri; 
var MongoClient = require('mongodb').MongoClient, Logger = 
require('mongodb').Logger; 

Logger.setLevel('debug'); 
describe("mongoconnection", function() { 

describe("fetch data", function() { 

    it("should fetch data from db", function (done) { 
     MongoClient.connect(uri,function(err, db) { 
       if (err) { 
        throw err; 
       } else { 
        console.log("successfully connected to the database"); 
       } 
       db.close(); 
      }); 
     done(); 
    }); 
}); 
}); 

然而中,代碼

function(err, db) { 
      if (err) { 
       throw err; 
      } else { 
       console.log("successfully connected to the database"); 
      } 
      db.close(); 
     } 
的這一部分

從未得到執行,我無法建立連接,例如我沒有得到控制檯日誌和例外。

調試信息:

[DEBUG-連接:9352] 1506430786041創建與項[{ 「主機」 連接0:HOST, 「端口」:PORT, 「尺寸」:5 「的keepAlive」:真的, 「keepAliveInitialDelay」:300000, 「無延遲」:真實的, 「connectionTimeout」:30000, 「了socketTimeout」:360000, 「SSL」:真實的, 「CA」:空, 「CRL」:空, 「證書」:爲空, 「rejectUnauthorized」:假 「promoteLongs」:真 「promoteValues」:真 「promoteBuffers」:假 「checkServerIdentity」:真}] {類型: '調試', 消息:「創建與選擇連接0 [{」舉辦 「:主機,」 口 「:PORT,」 大小 「:5」 的keepAlive 「:真實的,」 keepAliveInitialDelay 「:300000,」 無延遲 「:真實的,」 connectionTimeout 「:30000,」 了socketTimeout 「:360000,」 SSL」 :真, 「CA」:空, 「CRL」:空, 「證書」:爲空,「rejectUna uthorized「:false,」promoteLongs「:true,」promoteValues「:true,」promoteBuffers「:false,」checkServerIdentity「:true}]', className:'Connection', pid:9352, date:1506430786041}

也已經檢查了連接字符串是正確的,我可以通過建立其他應用程序(在了SoapUI執行Groovy腳本)連接到它。

我停留在這一點上,有人可以幫助我,在此先感謝。

回答

2

要調用從摩卡done()MongoClient.connect異步回調之外。所以done()甚至可以連接到數據庫之前被調用。

你的代碼改成這樣:

it("should fetch data from db", function (done) { 
    MongoClient.connect(uri,function(err, db) { 
      if (err) { 
       throw err; 
      } else { 
       console.log("successfully connected to the database"); 
      } 
      db.close(); 
      done(); 
    }); 
}); 
+0

感謝您的幫助! – penazik

+0

不客氣,如果它工作,你可以標記它是正確的:) –