在 CodeceptJS 场景中轮询异步 REST 服务直到结果为真
Polling a-sync REST service till result is true within CodeceptJS scenario
寻找一种解决方案来轮询异步 REST 调用,直到使用 Codeception / codeceptJS e2e 测试套件找到结果。完全不知道这是否可能。轮询将持续最多 1 到 2 分钟,每 10 秒一次就可以了。
Scenario.only('Poll for print job status', async (I, loginAs) => {
const guid = '4b46b91f-5e03-4bd1-845e-96d179b9f607';
const endPointObj = { endPoint: 'https://......../print-service/api/print/job/',
headers: { 'Ocp-Apim-Subscription-Key': 'theKey' },
APIversion: '?api-version=2019-07-01'
}
const printJobService = async (guid, found) => {
let serviceResultData;
const serviceResult = await I.sendGetRequest(`${endPointObj.endPoint}${guid}${endPointObj.APIversion}`, endPointObj.headers);
serviceResultData = serviceResult.data;
return serviceResultData;
}
const printJobServiceResultFound = await printJobService(guid);
const response = printJobServiceResultFound;
// checkResult is an external UTIL function that checks the result
assert.equal(checkResult(response), 'FOUND');
pause();
});
所以我已经开始工作了,但这只是 1 次 运行。一直在考虑不同的方法,但我唯一想出的是 retry() 函数,但它依赖于失败的东西。我的服务没有失败。
函数 printJobService
需要轮询。
不胜感激。
这是为旧的 RxJS 编写的,它递归地轮询服务直到服务返回 JSON 属性 __next,一旦 __next 不存在就意味着轮询已经完成停止。您可以将其修改为 rxJS 6+。让我知道是否有帮助
poll(): Observable<{source : STATS[], data : any[]}>{
return this.retrieve('STATS')
.map(res=>res.json().d)
.delay(5000)
.expand(obj => obj.__next
? this.retrieve('STATS',obj.__next.substr(obj.__next.indexOf('?')+1)).map(res=>res.json().d)
: Observable.empty()
)
.reduce((acc, data) => acc.concat(data.results), [])
.map((stats) => {
// when succesful
})
.catch(this.errorHandler);
};
寻找一种解决方案来轮询异步 REST 调用,直到使用 Codeception / codeceptJS e2e 测试套件找到结果。完全不知道这是否可能。轮询将持续最多 1 到 2 分钟,每 10 秒一次就可以了。
Scenario.only('Poll for print job status', async (I, loginAs) => {
const guid = '4b46b91f-5e03-4bd1-845e-96d179b9f607';
const endPointObj = { endPoint: 'https://......../print-service/api/print/job/',
headers: { 'Ocp-Apim-Subscription-Key': 'theKey' },
APIversion: '?api-version=2019-07-01'
}
const printJobService = async (guid, found) => {
let serviceResultData;
const serviceResult = await I.sendGetRequest(`${endPointObj.endPoint}${guid}${endPointObj.APIversion}`, endPointObj.headers);
serviceResultData = serviceResult.data;
return serviceResultData;
}
const printJobServiceResultFound = await printJobService(guid);
const response = printJobServiceResultFound;
// checkResult is an external UTIL function that checks the result
assert.equal(checkResult(response), 'FOUND');
pause();
});
所以我已经开始工作了,但这只是 1 次 运行。一直在考虑不同的方法,但我唯一想出的是 retry() 函数,但它依赖于失败的东西。我的服务没有失败。
函数 printJobService
需要轮询。
不胜感激。
这是为旧的 RxJS 编写的,它递归地轮询服务直到服务返回 JSON 属性 __next,一旦 __next 不存在就意味着轮询已经完成停止。您可以将其修改为 rxJS 6+。让我知道是否有帮助
poll(): Observable<{source : STATS[], data : any[]}>{
return this.retrieve('STATS')
.map(res=>res.json().d)
.delay(5000)
.expand(obj => obj.__next
? this.retrieve('STATS',obj.__next.substr(obj.__next.indexOf('?')+1)).map(res=>res.json().d)
: Observable.empty()
)
.reduce((acc, data) => acc.concat(data.results), [])
.map((stats) => {
// when succesful
})
.catch(this.errorHandler);
};