В тесте на кипарис мне нужно проверить действие, вызвав внешний API. Вызов API всегда будет возвращать результаты (от некоторого предыдущего запуска), поэтому я не могу просто вызвать один раз и проверить результат. Мне нужно повторить несколько раз, пока я не найду совпадение для текущего прогона с общим временем ожидания / сбоя. Количество времени, необходимое для получения текущего результата, сильно варьируется; Я не могу просто долго ждать безумного ожидания перед этим звонком.
Смотрите комментарии во фрагменте ниже; как только я пытаюсь выполнить запрос в цикле, он никогда не вызывается. Я получил тот же результат, используя cy.wait
. Также я не могу обернуть фактический запрос в другую функцию, которая возвращает Cypress.Promise
или аналогичную, которая просто выдвигает проблему на один кадр стека.
Cypress.Commands.add("verifyExternalAction", (someComparisonValue) => {
const options = {
"url": some_url,
"auth": { "bearer": some_apikey },
"headers": { "Accept": "application/json" }
};
//// This works fine; we hit the assertion inside then.
cy.request(options).then((resp) => {
assert.isTrue(resp.something > someComparisonValue);
});
//// We never enter then.
let retry = 0;
let foundMatch = false;
while ((retry < 1) && (!foundMatch)) {
cy.wait(10000);
retry++;
cy.request(options).then((resp) => {
if (resp.something > someComparisonValue) {
foundMatch = true;
}
});
}
assert.isTrue(foundMatch);
});