Cypress Assertion ci aiuta ad affermare un particolare Le asserzioni sono passaggi di convalida che garantiscono se il risultato atteso è uguale al risultato effettivo. Nell'automazione dei test, affermiamo una dichiarazione per verificare che il test stia generando il risultato atteso. Se l'asserzione fallisce, il test case fallisce assicurando che ci sia un bug. In questo articolo parleremo di Cypress Assertion con implementazione ed esempi di Handson.
Tabella dei Contenuti
- Cos'è l'affermazione di Cypress?
- Testo dell'asserto di cipresso
- Asserzione comune di cipresso
- Cipresso Riprova Asserzione
- Esempi di affermazione di cipresso
- Asserzione implicita in Cypress
- Affermazione esplicita in Cypress
- Affermazione negativa del cipresso
- Messaggio di asserzione personalizzato Cypress
- Migliori pratiche per l'affermazione di Cypress
Cos'è l'affermazione di Cypress?
Cypress utilizza e racchiude la libreria di asserzioni Chai ed estensioni come Sinon e JQuery. Cypress attende e riprova automaticamente fino a quando l'asserzione non viene risolta. Le asserzioni possono essere utilizzate per descrivere come dovrebbe apparire l'applicazione. Possiamo usare le asserzioni Cypress con una combinazione di attese, riprova, blocco fino a raggiungere lo stato desiderato.
Testo dell'asserto di cipresso
In inglese generale, descriveremmo un'affermazione del tipo, Mi aspetto che il pulsante contenga il testo di accesso. La stessa affermazione può essere scritta in Cypress come
cy.get('button').should('have.value', 'login')
L'affermazione di cui sopra passerà se il pulsante ha valore 'login'.
Affermazioni comuni sul cipresso
Ci sono una serie di asserzioni Cypress comuni che usiamo nei nostri casi di test. Li useremo con .should()
. Esaminiamo il caso d'uso e gli esempi.
Alcune delle comuni affermazioni di Cypress sono elencate di seguito
- Lunghezza
- Valore
- Contesto del testo
- Classe
- Esistenza
- CSS
- Visibilità
- Regione / Stato
- Proprietà per disabili
Affermazione della lunghezza del cipresso
length()
controllerà se il particolare elemento ha lunghezza
cy.get('dropdown').should('have.length', 5)
Affermazione del valore del cipresso
Il valore Cypress asserisce se il particolare elemento ha il valore atteso
cy.get('textfield').should('have.value', 'first name')
Asserzione del contesto del testo di Cypress
Il contesto del testo asserirà se l'elemento ha il testo particolare
cy.get('#user-name').should('have.text', 'John Doe')
Affermazione di classe Cypress
Afferma se la classe è presente o se il particolare elemento dovrebbe avere la classe
cy.get('form').find('input').should('have.class', 'disabled')
Affermazione dell'esistenza del cipresso
Il comando di esistenza controlla se il particolare elemento è presente o esiste nel DOM o no
cy.get('#button').should('exist')
Cypress CSS Asserzione
L'asserzione CSS controlla se i particolari elementi hanno una particolare proprietà
cy.get('.completed').should('have.css', 'text-decoration', 'line-through')
Asserzione di visibilità del cipresso
Cypress Visibility Assertion afferma se l'elemento DOM è visibile nell'interfaccia utente
cy.get('#form-submit').should('be.visible')
Affermazione dello stato del cipresso
Afferma lo stato dell'elemento DOM
cy.get(':radio').should('be.checked')
Asserzione di proprietà disabili di Cypress
L'asserzione della proprietà Cypress Disabled afferma se l'elemento è disabilitato
cy.get('#example-input').should('be.disabled')
Cipresso Riprova Asserzione
Un singolo comando seguito da un'asserzione verrà eseguito in ordine. Inizialmente, il comando viene eseguito e quindi l'asserzione verrà eseguita. Verrà eseguito anche un singolo comando seguito da più asserzioni in ordine, rispettivamente prima e seconda asserzione. Quindi, quando la prima asserzione passa, la prima e la seconda asserzione verranno eseguite di nuovo insieme ai comandi.
Ad esempio, il comando seguente contiene entrambi .should()
ed .and()
comandi di asserzione, dove .and()
è altrimenti noto come .should()
cy.get('.todo-list li') // comando .should('have.length', 2) // asserzione .and(($li) => { // altre 2 asserzioni wait($li.get (0).textContent, 'first item').to.equal('todo A') Expect($li.get(1).textContent, 'second item').to.equal('todo B') })
Esempi di affermazione di cipresso
In questa sezione, discuteremo sui diversi tipi di asserzioni in Cypress come
- Asserzione implicita
- Asserzione esplicita
Esamineremo in dettaglio entrambi i tipi con esempi
Asserzione implicita in Cypress
Nell'asserzione implicita, usiamo .should()
or .and()
comandi. Questi comandi di asserzione si applicano al soggetto attualmente fornito nella catena di comandi. Dipendono dal soggetto ceduto in precedenza.
Esamineremo un esempio su come utilizzare .should()
or .and()
comandi
cy.get('button').should('have.class', 'enabled')
Con .and()
che è un alias di .should()
, possiamo concatenare più asserzioni. Questi comandi sono più leggibili.
cy.get('#title') .should('have.class', 'active') .and('have.attr', 'href', '/post')
L'esempio sopra è concatenato con .should()
affermando che dovrebbe avere la classe "attivo", seguito da .and()
viene eseguito contro lo stesso comando. Questo è molto utile quando vogliamo asserire più comandi.
Affermazione esplicita in Cypress
Il passaggio del soggetto esplicito nelle asserzioni rientra nel tipo esplicito di asserzione Cypress. Qui, useremo expect
ed assert
comandi come asserzione. Le asserzioni esplicite vengono utilizzate quando vogliamo utilizzare più asserzioni per lo stesso argomento. Usiamo anche asserzioni esplicite in Cypress quando vogliamo fare personalizzato logica prima di fare l'affermazione.
Esamineremo il esempio per esplicito Cipresso asserzione
Expect(true).to.be.true //verifica un valore booleano Expect(object).to.equal(object)
Affermazione negativa del cipresso
Simile alle asserzioni positive, ci sono asserzioni negative in Cypress. Useremo la parola chiave "not" aggiunta al prefisso dell'asserzione. Vediamo un esempio di asserzione negativa
cy.get('#loading').should('not.be.visible')
L'asserzione negativa è consigliata solo nei casi in cui si verifica che una particolare condizione non sia più disponibile dopo che l'applicazione ha eseguito un'azione specifica.
Ad esempio, consideriamo che un toggle sia controllato e verifichiamo che sia stato rimosso
// all'inizio l'elemento è contrassegnato come completato cy.contains('li.todo', 'Scrivi test') .should('have.class', 'completed') .find('.toggle') .click() / / la classe CSS è stata rimossa cy.contains('li.todo', 'Scrivi test').should('not.have.class', 'completed')
Messaggio di asserzione personalizzato Cypress
Con Cypress, possiamo fornire informazioni aggiuntive o messaggi personalizzati per le asserzioni utilizzando una libreria di matcher. I matcher comprendono piccole funzioni che differenziano i valori e genereranno un messaggio di errore dettagliato. Chai la libreria di asserzioni aiuterà il nostro codice a sembrare più leggibile e l'errore di test molto utile
const aspetta = require('chai').expect it('verifica un numero', () => { valore const = 10 const previsto = 3 aspetta(valore).to.uguale(previsto)})
Migliori pratiche per l'affermazione di Cypress
Possiamo scrivere più asserzioni in un singolo blocco usando una catena di comandi. Non è necessario scrivere una singola asserzione come negli unit test. Molti scrivono affermazioni come di seguito. Va bene scrivere in quel modo, ma aumenta la riga di codice e la ridondanza.
describe('my form', () => { before(() => { cy.visit('/users/new') cy.get('#first').type('ashok') }) it( 'ha attributo di convalida', () => { cy.get('#first').should('have.attr', 'data-validation', 'required') // asserendo se il #first ha un campo obbligatorio } ) it('ha una classe attiva', () => { cy.get('#first').should('have.class', 'active') // affermando se la #first ha una classe attiva }) it( 'ha formattato il nome', () => { cy.get('#first').should('have.value', 'Ashok') // affermando se la #first ha la prima lettera maiuscola }) })
Come vedi sopra, lo stesso selettore e lo stesso tipo di asserzione viene ripetuto. Invece, possiamo concatenare questi comandi in un'unica asserzione che esegue tutti i controlli in modo lineare.
describe('my form', () => { before(() => { cy.visit('/users/new') }) it('validates and format first name', () => { cy.get ('#first') .type('ashok') .should('have.attr', 'data-validation', 'required') .and('have.class', 'active') .and('have .value', 'Ashok') }) })
Come accennato in precedenza, possiamo concatenare il singolo selettore con più asserzioni! Questa è una delle migliori pratiche consigliate per scrivere asserzioni in Cypress.
Per comprendere il modello oggetto della pagina in Cypress, fare clic su qui.
Ciao... sono Aishwarya Lakshmi, ho completato il mio B.Tech e ho quasi 2+ anni di esperienza nel settore dei test. Sono un entusiasta dei test e una passione per i test e amo esplorare nuove cose nel mio campo e condividerle con i miei colleghi. Mi piace scrivere blog durante il mio tempo libero nel modo più semplice ma efficace. Come tester, mi piace avere le cose alla perfezione, quindi auguro ai miei lettori di avere una perfetta comprensione della tecnologia. Mi tengo aggiornato con le nuove tecnologie relative ai test e passo il tempo a capirle. Sono felice di aiutare gli studenti a comprendere i concetti durante i test.
Ciao amico lettore,
Siamo una piccola squadra alla Techiescience, che lavora duro tra i grandi player. Se ti piace quello che vedi, condividi i nostri contenuti sui social media. Il tuo supporto fa una grande differenza. Grazie!