Отредактировано, чтобы избавиться от while l oop:
Вы можете переписать getData
на async/await
и заключить interval
в обещание. Как только первый ответ будет в порядке, очистите интервал, разрешите обещание и выполните второй вызов.
В модульном тесте просто ожидайте эту функцию, а затем проверьте детали ответа. Обратите внимание, что вы можете увеличить время ожидания мокко по умолчанию для теста, поскольку это может занять некоторое время. Что-то вроде:
async function getData(userId) {
const firstResponsePromise = new Promise(resolve => {
const interval = setInterval(async() => {
const response = await superagent.get('localhost:3000/user/details/').query({
'user': userId
}).type('application/json');
if (response.body['status'] == 'DONE') {
clearInterval(interval);
resolve();
}
}, 10000)
});
await firstResponsePromise;
return superagent.get('localhost:3000/user/details/get').type('application/json');
}
// unit test
it('User Get Data', async function () {
const res = await getData(userId);
expect(res).to.exist;
expect(res.status).to.equal(200);
expect(res.body).to.contain('operation');
expect(res.body["userDetails"]).to.exist;
});