在集成测试中等待服务完成处理的最佳方法是什么?

时间:2019-07-16 15:04:16

标签: node.js typescript jestjs integration-testing

您好,我有一个关于在JEST中编写集成测试的问题。我要端对端地测试以下流程。

  1. 向服务发布一些消息
  2. 服务在后台处理消息(这需要一些时间。比如说500毫秒)
  3. 通过GET请求检查结果

当然,处理过程需要一些随机时间,所以我不确定何时结束。此外,api不会公开任何端点来检查当前是否正在运行某些处理。我幼稚的方法是多次轮询服务以获取结果,然后在两者之间等待。但这当然不是最佳的。所以我的问题是是否有更好的方法。而且,如果我必须等待测试,那么达到此目标的最佳方法是什么。

这是我的JEST测试:

test('Test some api', async () => {
    // ...
    // post message into queue - message processing started
    // ...

    // retry get operation 10 times
    let getResult: any = undefined;
    for (let i = 0; i < 10; i += 1) {
        getResult = await axios.get('http://example.com/messages/some_uuid', headers);
        if (getResult.data && getResult.data.length > 0) {
            break;
        }
        // timeout ?? ... wait a little after each iteration
    }

    expect(getResult).toMatchObject({ status: 200 });
});

0 个答案:

没有答案