Cypress Assertion nos ajuda a afirmar um determinado Assertions são etapas de validação que garantem se o resultado esperado é igual ao resultado real. Na automação de teste, afirmamos uma declaração para verificar se o teste está gerando o resultado esperado. Se a asserção falhar, o caso de teste falhará garantindo que haja um bug. Neste artigo, falaremos sobre Cypress Assertion com implementação e exemplos do Handson.
Tabela de conteúdo
- O que é Cypress Assertion?
- Cypress Assert Texto
- Cypress declaração comum
- Asserção de nova tentativa do Cypress
- Exemplos de asserção do Cypress
- Afirmação implícita no Cypress
- Afirmação explícita no Cypress
- Asserção Cypress Negativa
- Mensagem de asserção personalizada do Cypress
- Práticas recomendadas de asserção de Cypress
O que é Cypress Assertion?
Cypress usa e envolve a biblioteca de asserção Chai e extensões como Sinon e JQuery. Cypress automaticamente espera e tenta novamente até que a asserção seja resolvida. As asserções podem ser usadas para descrever a aparência do aplicativo. Podemos usar asserções Cypress com combinação de espera, nova tentativa, bloqueio até atingir o estado desejado.
Cypress Assert Texto
Em inglês geral, descreveríamos uma afirmação como, Eu esperaria que o botão tivesse um texto de login. A mesma afirmação pode ser escrita no Cypress como
cy.get('button').should('have.value', 'login')
A afirmação acima será aprovada se o botão tiver o valor de 'login'.
Cypress afirmações comuns
Há um conjunto de afirmações comuns do Cypress que usamos em nossos casos de teste. Estaremos usando-os com .should()
. Vejamos o caso de uso e os exemplos.
Algumas das afirmações comuns do Cypress estão listadas abaixo
- Comprimento
- Valor
- Contexto do Texto
- Aula
- Existência
- APF
- Visibilidade
- Estado
- Propriedade Desabilitada
Asserção de comprimento de Cypress
length()
irá verificar se o elemento em particular tem comprimento
cy.get('dropdown').should('have.length', 5)
Asserção de valor Cypress
O valor Cypress irá afirmar se o elemento em particular tem o valor esperado
cy.get('textfield').should('have.value', 'first name')
Asserção de contexto de texto Cypress
O contexto do texto irá afirmar se o elemento tem o texto particular
cy.get('#user-name').should('have.text', 'John Doe')
Cypress Classe Assertion
Afirma se a classe está presente ou se o elemento específico deve ter a classe
cy.get('form').find('input').should('have.class', 'disabled')
Asserção de existência de Cypress
O comando de existência verifica se o elemento específico está presente ou existe no DOM ou não
cy.get('#button').should('exist')
Declaração CSS Cypress
A asserção de CSS verifica se os elementos específicos têm uma propriedade específica
cy.get('.completed').should('have.css', 'text-decoration', 'line-through')
Cypress Visibilidade Assertion
Cypress Visibility Assertion afirma se o elemento DOM está visível na IU
cy.get('#form-submit').should('be.visible')
Asserção de estado do Cypress
Afirma o estado do elemento DOM
cy.get(':radio').should('be.checked')
Asserção de propriedade Cypress desativada
A declaração da propriedade Cypress Disabled afirma se o elemento está desabilitado
cy.get('#example-input').should('be.disabled')
Asserção de nova tentativa do Cypress
Um único comando seguido de uma declaração será executado em ordem. Inicialmente, o comando é executado e, em seguida, a asserção será executada. Um único comando seguido por várias asserções também será executado na ordem - primeira e segunda asserções, respectivamente. Portanto, quando a primeira asserção for aprovada, a primeira e a segunda asserção serão executadas junto com os comandos novamente.
Por exemplo, o comando abaixo contém ambos .should()
e .and()
comandos de asserção, onde .and()
é também conhecido como .should()
cy.get('.todo-list li') // comando .should('have.length', 2) // afirmação .and(($li) => { // mais 2 afirmações expect($li.get (0).textContent, 'first item').to.equal('todo A') expect($li.get(1).textContent, 'second item').to.equal('todo B') })
Exemplos de asserção do Cypress
Nesta seção, discutiremos os diferentes tipos de asserções no Cypress, como
- Afirmação implícita
- Afirmação Explícita
Analisaremos os detalhes de ambos os tipos com exemplos
Afirmação implícita no Cypress
Na asserção implícita, usamos .should()
or .and()
comandos. Esses comandos de asserção se aplicam ao assunto atualmente submetido na cadeia de comandos. Eles são dependentes do assunto previamente produzido.
Veremos um exemplo de como usar .should()
or .and()
comandos
cy.get('button').should('have.class', 'enabled')
Com o .and()
que é um pseudônimo de .should()
, podemos encadear várias afirmações. Esses comandos são mais legíveis.
cy.get('#title') .should('have.class', 'active') .and('have.attr', 'href', '/post')
O exemplo acima está encadeado com .should()
informando que deve ter a classe “ativa”, seguida por .and()
é executado no mesmo comando. Isso é muito útil quando queremos declarar vários comandos.
Afirmação explícita no Cypress
A passagem de sujeito explícito nas asserções se enquadra no tipo explícito de asserção Cypress. Aqui, vamos usar expect
e assert
comandos como afirmação. Asserções explícitas são usadas quando queremos usar várias asserções para o mesmo assunto. Também usamos asserção explícita em Cypress quando queremos fazer personalizado lógica antes de fazer a afirmação.
Nós vamos olhar para o exemplo para Cypress explícito afirmação
expect(true).to.be.true //verifica se há um booleano expect(object).to.equal(object)
Asserção Cypress Negativa
Semelhante às afirmações positivas, existem afirmações negativas no Cypress. Estaremos usando a palavra-chave “não” adicionada ao prefixo da declaração de asserção. Vejamos um exemplo de afirmação negativa
cy.get('#loading').should('not.be.visible')
A asserção negativa é recomendada apenas em casos para verificar se uma determinada condição não está mais disponível depois que uma ação específica é executada pelo aplicativo.
Por exemplo, vamos considerar que uma chave está marcada e verificar se ela foi removida
// primeiro o item é marcado como concluído cy.contains('li.todo', 'Escrever testes') .should('have.class', 'completed') .find('.toggle') .click() / / a classe CSS foi removida cy.contains('li.todo', 'Escrever testes').should('not.have.class', 'completed')
Mensagem de asserção personalizada do Cypress
Com o Cypress, podemos fornecer informações adicionais ou mensagem personalizada para asserções usando uma biblioteca de matchers. Matchers é composto por pequenas funções que diferenciam valores e emitem mensagens de erro detalhadas. Chai biblioteca de asserção ajudará nosso código a parecer mais legível e a falha de teste muito útil
const expect = require('chai').expect it('verifica um número', () => { const valor = 10 const esperado = 3 expect(valor).to.equal(esperado) })
Práticas recomendadas de asserção de Cypress
Podemos escrever várias asserções em um único bloco usando uma cadeia de comandos. Não é necessário escrever uma afirmação única como nos testes de unidade. Muitos escrevem afirmações como abaixo. É normal escrever dessa maneira, mas aumenta a linha de código e a redundância.
describe('meu formulário', () => { before(() => { cy.visit('/users/new') cy.get('#first').type('ashok') }) it( 'tem atributo de validação', () => { cy.get('#first').should('have.attr', 'data-validation', 'required') // afirmando se o #first tem campo obrigatório } ) it('tem classe ativa', () => { cy.get('#first').should('have.class', 'active') // afirmando se o #first tem classe ativa }) it( 'tem o primeiro nome formatado', () => { cy.get('#first').should('have.value', 'Ashok') // afirmando se o #first tem a primeira letra maiúscula }) })
Como você pode ver acima, o mesmo seletor e tipo de asserção estão se repetindo. Em vez disso, podemos encadear esses comandos em uma única asserção que executa todas as verificações de maneira linear.
describe('meu formulário', () => { before(() => { cy.visit('/users/new') }) it('valida e formata primeiro nome', () => { cy.get ('#first') .type('ashok') .should('have.attr', 'data-validation', 'required') .and('have.class', 'active') .and('have .valor', 'Ashok') }) })
Conforme mencionado acima, podemos encadear o seletor único com várias asserções! Esta é uma das melhores práticas recomendadas para escrever asserções no Cypress.
Para entender sobre o Modelo de Objeto de Página no Cypress, clique SUA PARTICIPAÇÃO FAZ A DIFERENÇA.
Olá… eu sou Aishwarya Lakshmi, concluí meu B.Tech e tenho quase 2+ anos de experiência na área de testes. Sou um entusiasta de testes e apaixonado por testes e adoro explorar coisas novas em minha área e compartilhá-las com meus colegas. Gosto de escrever blogs durante meu tempo livre da maneira mais simples, mas eficaz. Como testador, gosto de ter as coisas perfeitas, por isso desejo que meus leitores tenham um entendimento perfeito da tecnologia. Eu me mantenho atualizado com as novas tecnologias relacionadas a testes e passo tempo entendendo-as. Fico feliz em ajudar os alunos a compreender os conceitos dos testes.
Olá caro leitor,
Somos uma equipe pequena na Techiescience, trabalhando duro entre os grandes players. Se você gostou do que viu, compartilhe nosso conteúdo nas redes sociais. Seu apoio faz uma grande diferença. Obrigado!