2015-04-06 146 views
0

我有一個簡單的數據訪問節點文件,它似乎工作在我的手動測試。代碼在這裏:訪問Mongo從摩卡測試節點

(function() { 

var mongojs = require("mongojs"); 
var uuid = require("node-uuid"); 

var db = mongojs("tradeAssistant", ["tickers"]); 

function insertTicker(tickerSymbol) { 
    if (tickerSymbol) { 
     var ticker = db.tickers.findOne({ 
      symbol: tickerSymbol 
     }); 

     if (!ticker) { 
      console.log("inserting " + tickerSymbol); 

      db.tickers.insert({ 
       _id: uuid.v4(), 
       symbol: tickerSymbol, 
       isNew: true 
      }, function(err, data) { 
       console.log("back from db.tickers.insert"); 
      }); 
     } 
    } 
} 

exports.addTickers = function addTickers(tickers, callback) { 
    if (tickers) { 
     for (var i = 0; i < tickers.length; i++) { 
      insertTicker(tickers[i].toUpperCase()); 
     } 
    } 
    callback(null, null); 
}; 

exports.fetchTickers = function fetchTickers(query, callback) { 
    var results = []; 
    if (!query) { 
     query = {} 
    }; 

    db.tickers.find(query, function(err, docs) { 
     if (!err) { 
      for (var i = 0; i < docs.length; i++) { 
       results.push(docs[i]); 
      } 
     } 
     callback(err, results); 
    }); 
} 
})(); 

正如我所說,該代碼似乎工作。我試圖建立一些摩卡集成測試,但他們沒有工作。當我開始深入調試時,我發現mongo根本不能在摩卡里面工作。不太確定我錯過了什麼。

(function() { 
var mongojs = require("mongojs"); 
var should = require("should"); 
var db = mongojs("tradeAssistant", ["tickers"]); 

//var tickerData = require("../../mongoDataAccess/tickersAccess"); 

describe("tickerAccess.addTickers()", function() { 
    it("test 1", function() { 

     db.tickers.insert({ 
      symbol: "DIA", 
      isNew: true 
     }, function(err, data) { 
      console.log("hello world"); 
     }); 
    }); 
}); 
})(); 

我是新來的Node,所以如果你看到其他需要「修復」的東西,請不要害羞。但更重要的是,如果mongo看起來不適合摩卡,任何人都可以提供幫助,我將不勝感激。我沒有錯誤; mongo日誌文件中沒有任何內容,我的console.log()永遠不會被調用。

在此先感謝您的幫助。

維克

+0

您如何運行測試文件? – lxe

+0

很好的問題。從命令行,我使用摩卡 - 遞歸。而已。根據摩卡測試「通過」,但沒有任何反應。 –

回答

0

您忽略了測試的異步性質。您可以像這樣爲您的測試添加回調:

describe("tickerAccess.addTickers()", function() { 
    it("test 1", function(done) { 
    db.tickers.insert({ 
     symbol: "DIA", 
     isNew: true 
    }, function(err, data) { 
     console.log("hello world"); 
     done() 
    }); 
    }); 
}); 
+0

明白了。你和lxe說得對。 。 。我把錯誤的函數參數列表中的完成。感謝您的幫助。 –

1

您需要建立it處理程序採取done參數,並在蒙戈操作的回調調用done()讓摩卡知道異步操作已完成:

describe("tickerAccess.addTickers()", function() { 
    it("test 1", function(done) { 

     db.tickers.insert({ 
      symbol: "DIA", 
      isNew: true 
     }, function(err, data) { 
      console.log("hello world"); 
      done(); 
     }); 
    }); 
}); 

有關如何在摩卡here中運行異步代碼的更多信息。

+0

感謝您的反饋。但是,這是行不通的。此外,console.log()也不會發生,所以我不認爲這個回調函數會被執行。 Mongo必須以某種方式失敗,但我不知道如何或爲什麼。 –