Cypress - Commands
Opublikowano sob 29 stycznia 2022 w qa • 1 min read
Wprowadzenie
Cypress jako taki zawiera różnego rodzaju komendy odpowiadający za konkretne przeprowadzanie testów mających wpływ na zachowanie się aplikacji, pozwala również na dodanie własnych komend tzw. custom commands - które nie są niczym innym niż funkcją które w łatwy sposób można łączyć z obiektami cypressowymi - to pozwala na zamknięcie pewnej powtarzalnej logiki/kodu, który można stosować w wielu miejscach.
-
overwrite
pozwala na nadpisanie funkcji już w cypressie zawartych =>Cypress.Commands.overwrite('visit', (originalFn, url, options) => { return originalFn(url, { ...options, onBeforeLoad(win) { win.fetch = null; }, }); });
Po zainstalowaniu Cypressa w folderze support znaleźć można plik commands.js - ten musi być podlinkowany w index.js aby nasze komendy były importowane za każdym razem kiedy cypress jest odpalany.
Przykładowe komendy - commands.js
Wybranie n-tego dziecka
Cypress.Commands.add('selectNth', { prevSubject: 'element' }, (subject, nth) => {
cy.wrap(subject)
.children('option')
.eq(nth)
.then(elem => {
cy.wrap(subject).select(elem.val())
})
})
zastosowanie
cy.get('#select').selectNth(2)
Prosty generator tekstu
const generateRandomText = () => Math.random().toString(36).substr(2, 10)
Cypress.Commands.add('fillWithRandomText', { prevSubject: 'element' }, subject =>
cy.wrap(subject).clear().type(generateRandomText()),
)
analogicznie zastosowanie
cy.get('#input').fillWithRandomText()
Do tej komendy sprawdzającej zawartość tekstu należy przekazać łańcuch znaków
Cypress.Commands.add('checkTextContent', { prevSubject: 'element' }, (subject, contains: string) =>
cy
.wrap(subject)
.invoke('text')
.then(text => {
expect(text).to.contain(contains)
}),
)
cy.get('#input').checkTextContent('Hello World')
Ta komenda przyjmuje url w postaci łańcucha znaków oraz tablicę zawierającą obiekty, którymi request ma być stubbowany/ dto które mają być podstawione podczas kolejnych zapytań / założenie jest że w danym teście mamy testować reakcję aplikacji, obsługujących wiele zapytań tego samego typu, ale różnych zawartościach odpowiedzi na nie.
Cypress.Commands.add('multipleIntercepts', (url: string, responses: {}[]) => {
cy.intercept(url, req => {
req.reply(responses.shift())
})
})
Źródła:
Create your OWN CYPRESS COMMAND NOW! | Cypress Tutorial For Beginners