Условное ожидание в Cypress

Используя рекурсивную функцию, вы можете многократно ждать запроса, пока не получите желаемый ответ

Прецедент

В нашем тестовом примере участвует существующий пользователь (постоянный пользователь), который приглашает нового пользователя по электронной почте. Новый пользователь получает ссылку на регистрацию и регистрируется в приложении Determ. После того, как новый пользователь был зарегистрирован и получил доступ к приложению, нам нужно удалить его, чтобы подчистить после теста. Однако мы не хотим удалять существующего пользователя, поэтому нам нужно проверить идентификатор пользователя перед удалением пользователя.

Решение

Чтобы удалить только что созданного пользователя, нам нужно перехватить и дождаться определенного запроса API, содержащего токен доступа пользователя. Однако такой же запрос отправляется и для существующего пользователя, и мы не хотим их удалять. Единственная разница между пользователями — это их идентификатор пользователя, который мы можем получить только из ответа на запрос API.

Чтобы решить эту проблему, мы можем использовать рекурсивную функцию, которая ожидает запроса API и проверяет идентификатор пользователя. Если идентификатор пользователя совпадает с идентификатором существующего пользователя, функция снова вызывает себя. Если идентификатор пользователя не совпадает, мы сохраняем токен доступа и используем его для последующего удаления пользователя.

Вот код рекурсивной функции:

Затем внутри вашего теста просто вызовите функцию:

Заключение

Проверяя идентификатор пользователя в ответе, мы можем убедиться, что удаляем только правильного пользователя. Подход рекурсивных функций может быть полезен, когда вам нужно дождаться определенного запроса API и обработать его ответ условно. А используя рекурсивную функцию, вы можете многократно ждать запроса, пока не получите желаемый ответ.

Если у вас есть аналогичная проблема или вам нужна помощь в реализации этого решения, не стесняйтесь оставлять комментарии.