[英]Avoid using setTimeout() in Elasticsearch requests with Mocha testing
我正在使用 Mocha 框架为 API 编写单元测试,我的 API 使用 elasticsearch。
在这种情况下,我正在编写一个后期测试并在之后删除它(在after
中)。
这里的问题是,当delete
运行时,数据库中还没有这些值。 如果我将删除请求包装在setTimeout()
中,如下所示,它可以正常工作。
在这种情况下如何避免使用setTimeout()
?
describe('POST New Group', function() {
this.timeout(MOCHA_TIMEOUT)
const optionsPost = {
'method': 'POST',
'uri': `http://localhost/groups`,
'json': true,
'body': {
"name": "Test",
"desc": "Lorem ipsum dolore",
"games": []
}
}
const optionsDelete = {
'method': 'DELETE',
'uri': `http://localhost/groups/Test`,
'json': true
}
after(function() {
console.log("Started delete")
setTimeout(() => {
request.delete(optionsDelete, (err, res, body) => {
console.log("Finished delete")
assert.equal(res.statusCode, 200)
})
}, 1000)
})
it('Should return success message with the status code \'201 Created\'', function(done) {
console.log("Started post")
request.post(optionsPost, (err, res, body) => {
console.log("Finished post")
assert.equal(body.status, 'Group created')
assert.equal(res.statusCode, 201)
done()
})
});
});
更好的选择是在索引时设置{"refresh": true}
。 这告诉 elasticsearch 在索引时刷新它并使数据可用。 因此,在您的情况下,您不需要在发布和删除之间进行额外的刷新 api 调用
我想通了。 如果有人偶然发现这个问题,你必须使用 ElasticSearch 的Refresh API
。
在这种特殊情况下,我不能先post
,然后再delete
。 我必须post
、 refresh
,最后delete
。
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.