У меня есть код проверки формы asyn c, который я хотел бы проверить с помощью Cypress. Код довольно прост -
- при вводе пользователем, введите asyn c состояние пользовательского интерфейса проверки (или оставайтесь в этом состоянии, если есть предыдущие запросы проверки, на которые не было ответа)
- отправить запрос на сервер
- получить ответ
- если нет ожидающих запросов, оставить asyn c состояние пользовательского интерфейса проверки
Шаг 1 это часть, которую я хочу проверить. Прямо сейчас это означает проверку, если некоторому элементу был назначен некоторый класс - но изменения состояния могут произойти очень быстро, и большую часть времени (не всегда!) Cypress истекает в ожидании чего-то, что УЖЕ произошло (другими словами, шаг 4 уже наступил к тому времени, когда мы добрались до того, чтобы увидеть, произошел ли шаг 1.) вторая строка, шаг 4 уже запущен и тест не пройден. Есть ли общий шаблон, который я должен знать, чтобы решить эту проблему? Естественно, я бы предпочел не менять тестируемый код.
Редактировать 1:
Я не уверен, что на 100% решил "гонку" условие здесь, но если я использую базовые нативные элементы (исключая абстракцию jQuery), у меня еще не было ошибки.
Итак, изменив:
cy.get("#some-input").type("...")
на:
cy.get("#some-input").then(jQueryObj => {
let nativeElement = jQueryObj[0];
nativeElement.value = "...";
nativeElement.dispatchEvent(new Event("input")); // make sure the app knows this element changed
});
А затем запуск Cypress 'проверок того, какие классы были / не были добавлены, был эффективен.