Не лучший титул, но вот мой вызов. У меня есть список на моей странице, который можно отсортировать, и я хочу Cypress-тест, который проверяет, работает ли он должным образом. Итак, представьте себе этот тест:
/* 1 */ cy.get('.list-item').eq(0).should('have.text', 'A');
/* 2 */ cy.get('.list-item').eq(-1).should('have.text', 'Z');
// Code that triggers sorting to change from asc to desc
/* 3 */ cy.get('.list-item').eq(0).should('have.text', 'Z');
/* 4 */ cy.get('.list-item').eq(-1).should('have.text', 'A');
Выглядит просто, но при сортировке происходит небольшая задержка, поэтому пользовательский интерфейс не обновляется немедленно .
I ' Я не уверен, что это вызвано функцией cy.get
или eq
, но проблема в том, что строка 3 «захватывает» первый элемент в списке, который по-прежнему 'A'
, а затем пытается утверждать, что текст 'Z'
. И когда список переупорядочивается, этот «захваченный» элемент фактически не изменяется, он просто перемещается в DOM, поэтому утверждение still пытается установить тот же элемент 'A'
, который в DOM на самом деле последний элемент сейчас - это 'Z'
, который, очевидно, не является и не должен быть.
Если я вставлю cy.wait(100)
перед 3, тогда он будет работать, как и ожидалось, но, очевидно, я не хотите, чтобы в моем тесте было случайное ожидание, так как мне решить эту проблему?
Как проверить, каков первый и последний элементы в такой ситуации, когда Cypress захватывает элементы DOM перед тем они переупорядочены без вставки произвольного ожидания? 10
Фактический случай
- Приложение поддержки, отображающее список 5 самых последних просмотренных клиентов
- Необходимо проверить это при посещении, например, номера 3 в этом списке, он перемещается в начало
- «Код, запускающий сортировку» на самом деле является событием навигации по маршруту:
- Есть слушатель (перехват React
useEffect
) при изменении маршрута . - При изменении маршрута обновляется список недавно просмотренных идентификаторов клиентов, который хранится в локальном хранилище.
- При изменении списка в локальном хранилище компонент, показывающий этот список, сначала ожидает 750 мс. (так что это менее запутанно для пользователя, но в Cypress-тестах оно уменьшено до 10 мс), затем обновляет (повторно сортирует) список.
- И так как список содержит только идентификаторы, каждая плитка будет асин c загрузите имя и еще кое-что для отображения в элементе списка.
Итак ... задержка на самом деле больше, чем просто обновление пользовательского интерфейса. Также включены запросы маршрутизации, локального хранилища и асин c. ?