繁体   English   中英

避免在带有 Mocha 测试的 Elasticsearch 请求中使用 setTimeout()

[英]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 我必须postrefresh ,最后delete

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM