Мне нравится быть очень точным в отношении того, что я ожидаю, поэтому я обычно делаю следующее:
Упорядочить:
УкажитеКонечные точки API, которые вы собираетесь вызвать / должны ждать (это не обязательно, но вы можете быть уверены, что подтверждения не будут выполняться до разрешения вызова)
cy.server()
cy.route('POST', '**/registration').as('registerCall')
cy.route('POST', '**/verification').as('verifyCall')
(вы можете точно сопоставить маршрутString, Glob или RegEx, https://docs.cypress.io/api/commands/route.html#Syntax)
Act:
Ударьте его
cy.visit('/')
.getByText('Start the process')
.click()
Подтвердите:
a) Если вы ожидаете немедленного перенаправления, подтвердите его
cy.url().should('eq', `${BASE_URL}/redirect1`)
или
б) Если вы делаете вызов API и перенаправляете только после этого, давайте подождем, пока он разрешится, а затем подтвердим.Мы указываем ожидаемый API-вызов с @
, за которым следует псевдоним, который мы установили выше (cy.route(...).as(yourAlias)
).Я назвал свой первый вызов API как registerCall
, поэтому мы ждем его разрешения, прежде чем делать дальнейшие утверждения:
cy.wait('@registerCall')
cy.url().should('eq', `${BASE_URL}/redirect1`)
Если вы ожидаете, что какой-нибудь текст / загрузчик отобразится, проверьте наличиеit
cy.findByTestId('loader-component').should('be.visible')
cy.getByText(/^please wait$/i).should('be.visible')
Дождитесь следующего вызова API и проверьте, не изменился ли маршрут после него
cy.wait('@verifyCall')
cy.url().should('eq', `${BASE_URL}/redirect2`)
... по цепочкеОстальные из вас утверждения.Это может продолжаться вечно.
Надеюсь, это поможет, дайте мне знать, если я сделал некоторые вещи неясными!
PS getByText
(вместе с другими классными селекторами)поставляется из cypress-testing-library , которая построена поверх dom-testing-library и позволяет вам перемещаться по приложению так, как это делает пользователь, то есть, в основном, просто находятекст.