gpt4 book ai didi

node.js - 使用 mocha 进行集成测试时如何处理 elasticsearch 的索引计时

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:25 24 4
gpt4 key购买 nike

我正在开发一个使用elasticsearch 的 Node 项目。我的测试链是gulp、mocha、chai、sinon。我很难让我的集成测试一致地工作。我想在数据库中加载示例数据,然后对其运行一些测试。我相信我遇到了问题,因为我正在加载的文档在使用它们的测试运行时没有被索引。

我通过执行以下操作解决了这个问题:

    before(function (done) {
testData.simpleLoadData(100, 2000);
setTimeout(function () {
done();
}, 5000);
});

这在本地运行良好,偶尔在 travis 上运行。当我将计时器调到 10000 时,它通常在两个地方都可以工作。

有没有一种方法可以在不使用测试代码中的 setTimeouts 的情况下实现此目的?手动处理时间让我有点拘谨。

手动处理超时是我拥有的最佳选择还是有更好的方法?

注意:这些是集成测试,我明确希望使用外部依赖项。我已经有不依赖数据库的单元测试。

最佳答案

这里有两件事可能会让您陷入困境:分片分配和刷新周期。

当您创建新索引时,可能会发生第一种情况。一旦主 Node 确认请求并开始创建过程,创建索引 api 将立即返回 200 OK。但实际的分片分配是在后台异步发生的。虽然速度很快,但集成测试有时会在索引完全启动并运行之前执行,从而在您尝试对文档建立索引时导致错误。

使其稳健的最简单方法是创建索引,然后调用 Health APIwait_for_status=green (或黄色,取决于您是否使用副本)。此调用将阻塞,直到索引完全分配。

下一期涉及搜索的近实时方面。默认情况下,Elasticsearch 每秒刷新一次搜索索引。这对于集成测试来说可能太慢,并且当您的测试运行时,您的文档可能会被索引但无法搜索。

要解决此问题,请索引所有文档,然后调用 Refresh API在目标指数上。一旦此调用返回,您的文档将“实时”并且可搜索。

关于node.js - 使用 mocha 进行集成测试时如何处理 elasticsearch 的索引计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36665873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com