#javascript #promise #async-await #mocha.js #es6-promise
#javascript #обещание #асинхронный-ожидание #mocha.js #es6-обещание
Вопрос:
Я пытаюсь протестировать свои REST API с использованием Mocha и Chai.
Ниже приведен фрагмент кода
"use strict"
// all required varibles modules declaration
describe("Get Data", function () {
it("Get Final Data", function () {
return getFinalResponse(
"https://localhost/getdata",
"GET",
JSON.stringify(rawdata)
)
.then((response) => response)
.then(async (response) => {
console.log(response)
let jsonData = await response.json()
operationId = jsonData.operation
console.log(jsonData.operation)
})
})
})
function delay(t) {
return new Promise((resolve) => setTimeout(resolve, t))
}
async function restCall(url, method, data) {
const signer = new common.DefaultRequestSigner(provider)
const httpRequest = {
uri: url,
headers: new Headers(),
method: method,
body: data,
}
await signer.signHttpRequest(httpRequest)
const response = await fetch(
new Request(httpRequest.uri, {
method: httpRequest.method,
headers: httpRequest.headers,
body: httpRequest.body,
})
)
return response
}
async function getFinalResponse(url, method, data) {
let response
do {
await delay(10000)
response = await restCall(url "/done", method, data)
} while ((await response.json()["status"]) !== "DONE")
return restCall(url, method)
}
Условие while(await response.json()["status"] !== 'DONE')
прерывается / завершается через 1 минуту, но даже после истечения 2 минут в качестве тайм-аута мокко. Я не получаю ожидаемый результат.
Пожалуйста, помогите мне, в чем может быть проблема.
Комментарии:
1. где ваша обработка ошибок? возможно, произошла ошибка
2.Не должен ли
it
обратный вызов получать параметр обратного вызова функции с именемdone
? Таким образом, вы можете вызватьdone()
, как только тест завершится? Или это уже известно о promise? Otoh, вы всегда вызываетеrestCall
с одними и теми же параметрами, почему это когда-либо возвращаетstatus
DONE
? Что вы на самом деле здесь тестируете?3. @hgb123 Вы не только изменили форматирование, но и отредактировали части кода операционной системы (например, условие while), было ли это намеренным?
4. Нет, я ничего не менял, кроме URL, поскольку это конфиденциально. Мне нужно продолжать вызывать конечную точку, пока я не получу статус «ВЫПОЛНЕНО»
5. Ошибка @Jaromanda X говорит, что время ожидания превышено, но если я запускаю конечную точку независимо, это дает мне статус «ГОТОВО», т. Е. Ожидаемый ответ в течение 1 минуты. но при выполнении условного обещания с циклом я не получаю то же самое.