从 Node 的 mocha 测试中访问 Mongo
Accessing Mongo from within mocha tests for Node
我有一个用于一些简单数据访问的节点文件,它似乎在我的手动测试中有效。该代码在这里:
(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);
});
}
})();
正如我所说,该代码似乎有效。我试图构建一些 mocha 集成测试,但它们没有用。当我开始深入研究和调试时,我发现 mongo 在 Mocha 内部根本不起作用。不太确定我错过了什么。
(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 新手,所以如果您看到其他需要 "fixing," 的东西,请不要害羞。然而,更重要的是,我将不胜感激任何人可以提供的关于为什么 mongo 似乎无法从 mocha 工作的任何帮助。我没有错误; mongo 日志文件中没有任何内容,而且我的 console.log() 永远不会被调用。
在此先感谢您的帮助。
维克
你需要设置it
处理程序来获取done
参数,并在mongo操作的回调中调用done()
让mocha知道异步操作已完成:
describe("tickerAccess.addTickers()", function() {
it("test 1", function(done) {
db.tickers.insert({
symbol: "DIA",
isNew: true
}, function(err, data) {
console.log("hello world");
done();
});
});
});
有关如何 运行 mocha 中的异步代码的更多信息 here。
您忽略了测试的异步性质。您可以像这样向测试添加回调:
describe("tickerAccess.addTickers()", function() {
it("test 1", function(done) {
db.tickers.insert({
symbol: "DIA",
isNew: true
}, function(err, data) {
console.log("hello world");
done()
});
});
});
我有一个用于一些简单数据访问的节点文件,它似乎在我的手动测试中有效。该代码在这里:
(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);
});
}
})();
正如我所说,该代码似乎有效。我试图构建一些 mocha 集成测试,但它们没有用。当我开始深入研究和调试时,我发现 mongo 在 Mocha 内部根本不起作用。不太确定我错过了什么。
(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 新手,所以如果您看到其他需要 "fixing," 的东西,请不要害羞。然而,更重要的是,我将不胜感激任何人可以提供的关于为什么 mongo 似乎无法从 mocha 工作的任何帮助。我没有错误; mongo 日志文件中没有任何内容,而且我的 console.log() 永远不会被调用。
在此先感谢您的帮助。
维克
你需要设置it
处理程序来获取done
参数,并在mongo操作的回调中调用done()
让mocha知道异步操作已完成:
describe("tickerAccess.addTickers()", function() {
it("test 1", function(done) {
db.tickers.insert({
symbol: "DIA",
isNew: true
}, function(err, data) {
console.log("hello world");
done();
});
});
});
有关如何 运行 mocha 中的异步代码的更多信息 here。
您忽略了测试的异步性质。您可以像这样向测试添加回调:
describe("tickerAccess.addTickers()", function() {
it("test 1", function(done) {
db.tickers.insert({
symbol: "DIA",
isNew: true
}, function(err, data) {
console.log("hello world");
done()
});
});
});