2015-04-06 108 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必须以某种方式失败,但我不知道如何或为什么。 –