Node.js 使用节点测试ElasticSearch。填充MongoDB后强制更新索引
我正在填充MongoDB并在测试中添加一个before钩子。但在我查询MongoDB时,Elasticsearch似乎没有索引我在MongoDB中的数据。 我是做错了,还是应该以某种方式强制更新Node.js 使用节点测试ElasticSearch。填充MongoDB后强制更新索引,node.js,mongodb,
elasticsearch,mocha.js,Node.js,Mongodb,
elasticsearch,Mocha.js,我正在填充MongoDB并在测试中添加一个before钩子。但在我查询MongoDB时,Elasticsearch似乎没有索引我在MongoDB中的数据。 我是做错了,还是应该以某种方式强制更新 function setupMongoDBRiver() { var url = 'http://127.0.0.1:9200/_river/mongodb/_meta'; var requestData = { "type": "mongodb",
function setupMongoDBRiver() {
var url = 'http://127.0.0.1:9200/_river/mongodb/_meta';
var requestData = {
"type": "mongodb",
"mongodb": {
"db": "harvester-test",
"collection": "entries"
},
"index": {
"name": "harvester-test",
"type": "entries"
}
};
request({
url: url,
method: 'PUT',
body: JSON.stringify(requestData)
},
}
describe('Entries Test Parameters', function() {
before(function(done) {
DatabaseHelper.restoreAll(mongoUrl, done);
deleteTestIndex();
setupMongoDBRiver();
testQuery();
// ^ curl http://127.0.0.1:9200/harvester-test/entries/_search?pretty=true&q=*:*
}
testQuery不返回我在MongoDB中输入的内容。可能是ES需要更多的时间来索引数据?
我必须指定ES索引,还是由river mongodb负责
干杯,
Martin关于
before()
函数,有几点需要注意,这似乎表明您尚未完全掌握异步函数调用在节点上的工作原理
让我走过这些步骤:
DatabaseHelper.restoreAll(mongoUrl, done);
我假设此函数将MongoDB重置或恢复到预定义状态。当Mocha的done
回调完成时,您正在调用它(它向Mocha发出信号,表示before()
已完成),但仍继续调用其他函数。当一切就绪时,您应该调用done
,而不仅仅是第一个函数
deleteTestIndex();
setupMongoDBRiver();
testQuery();
这些都是异步函数。换句话说,在继续下一步之前,您需要显式地等待它们的完成(首先要删除测试索引,然后设置MongoDB river,然后运行测试查询)
一个协调异步函数的好模块是。您可以使用(或者可能使用)来协调函数调用,但这需要一些重写(例如,您的setupMongoDBRiver()
函数不调用完成回调)
假设您重写代码以使用完成回调,则您的before()
看起来与此类似:
before(function(done) {
async.series([
function(next) {
DatabaseHelper.restoreAll(mongoUrl, next);
},
function(next) {
deleteTestIndex(next);
},
function(next) {
setupMongoDBRiver(next);
},
function(next) {
testQuery(next);
}
], function(err) {
if (err) return done(err);
done();
});
});
(注意:这可以写得更简洁,但为了清晰起见,我使用了详细的表示法)关于
before()
函数,有几点需要注意,这似乎表明您尚未完全掌握异步函数调用在节点上的工作原理
让我走过这些步骤:
DatabaseHelper.restoreAll(mongoUrl, done);
我假设此函数将MongoDB重置或恢复到预定义状态。当Mocha的done
回调完成时,您正在调用它(它向Mocha发出信号,表示before()
已完成),但仍继续调用其他函数。当一切就绪时,您应该调用done
,而不仅仅是第一个函数
deleteTestIndex();
setupMongoDBRiver();
testQuery();
这些都是异步函数。换句话说,在继续下一步之前,您需要显式地等待它们的完成(首先要删除测试索引,然后设置MongoDB river,然后运行测试查询)
一个协调异步函数的好模块是。您可以使用(或者可能使用)来协调函数调用,但这需要一些重写(例如,您的setupMongoDBRiver()
函数不调用完成回调)
假设您重写代码以使用完成回调,则您的before()
看起来与此类似:
before(function(done) {
async.series([
function(next) {
DatabaseHelper.restoreAll(mongoUrl, next);
},
function(next) {
deleteTestIndex(next);
},
function(next) {
setupMongoDBRiver(next);
},
function(next) {
testQuery(next);
}
], function(err) {
if (err) return done(err);
done();
});
});
(注意:这可以写得更简洁,但为了清晰起见,我使用了详细的符号)