Я пытаюсь выяснить, могу ли я условно пропустить тест it()
в моем наборе тестов, а также разобраться с его асинхронной природой.
Я читал об условном тестировании вCypress docs https://docs.cypress.io/guides/core-concepts/conditional-testing.html, а также документация mochajs об этом https://mochajs.org/.
Мое намерение состоит в том, чтобы проверить, отображается ли ошибка на веб-сайте, и пропустить тест, если это так.В противном случае продолжите с утверждениями.
Фрагмент кода от mochajs, который я пытаюсь взять на тест в Cypress:
it('should only test in the correct environment', function() {
if (/* check test environment */) {
// make assertions
} else {
this.skip();
}
});
Итак, что я получил в Cypress:
it('shows the list', function() {
if (queryFailed()) {
this.skip();
} else {
cy.get('.list')
.should('be.visible')
}
Обратите внимание, что я изменил функцию стрелки в моем it()
на function()
, чтобы я мог использовать this
.
queryFailed()
- это функциякоторый проверяет, успешно ли выполнен запрос.
function queryFailed() {
cy.get('.spin')
.then($container => {
const htmlLoaded = $container[0].innerHTML;
if (htmlLoaded.indexOf('List') !== -1) {
return false;
}
if (htmlLoaded.indexOf('error') !== -1) {
return true;
}
cy.wait(1000);
queryFailed();
});
}
Вкратце, если содержимое элемента div
, который я жду, имеет «ошибку», то я знаю, что запрос не выполнен, поэтому я возвращаю true, в противном случаеЯ возвращаю false.
Что я вижу в своих тестах после отладки, так это то, что хотя условие работает хорошо, асинхронная природа JS выполняет код в операторе else
одновременно с * 1030.*.Таким образом, окончательный вывод выглядит так, как будто условия вообще отсутствуют, поскольку все проверено.
Есть ли лучший способ справиться с этой асинхронной функцией JS?