Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (2024)

Info

O que você aprenderá

  • Como começar a testar um novo projeto em Cypress.
  • Como são os testes de passagem e falha.
  • Testando as afirmações de navegação na web, consulta DOM e redação.

Adicione um arquivo de teste

Assumindo que você tem sucessocipreste instaladoeCippress aberto, agora é hora de addyour primeiro teste.Nós vamos fazer isso com oCrie novo vaziobotão.

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (1)

Ao clicar nele, você deve ver uma caixa de diálogo na qual você pode inserir o nome do seu Newspec.Basta aceitar o nome padrão por enquanto.

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (2)

A especificação recém-gerada é exibida em uma caixa de diálogo de confirmação.Basta ir em frente e feche -o com o botão ✕.

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (3)

Depois de criarmos esse arquivo, você deve vê-lo imediatamente exibido na lista de especificações de ponta a ponta.O Cypress monitora seus arquivos de especificações para quaisquer alterações e exibe automaticamente quaisquer alterações.

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (4)

Embora ainda não tenhamos escrito nenhum código - tudo bem - vamos clicar em sua especificação e assistir o Cypress iniciá -lo.Alerta de spoiler: provavelmente vaiFALHAR.Não se preocupe, é só porque você ainda não configurou o Cypress para visitar o Apage em seu aplicativo!Vamos tentar algo diferente.

Escreva seu primeiro teste

Agora é hora de escrever seu primeiro teste.Estava indo para:

  1. Escreva seu primeiro teste de passagem.
  2. Atualize -o para que falhe.
  3. Assista ao Cypress Reload em tempo real.

Abra seu IDE favorito e substitua o conteúdo da sua especificação pelo CodeBelAw.

descrever('Meu primeiro teste', Assim, () => {
isto('Não faz muito!', Assim, () => {
esperar(verdadeiro).para.igual(verdadeiro)
})
})

Depois de salvar essa alteração, você deve ver o navegador recarregar.

Embora não faça nada útil, este é o nosso primeiro teste de passagem!✅

NoLog de comandoVocê verá o cipreste exibir a suíte, o teste e sua primeira afirmação (que devem passar em verde).

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (5)

Info

Observe o Cypress exibe uma mensagem sobre esta ser a página padrãono lado direito.Cypress supõe que você queira sair eVisitaUm URL na Internet - mas também pode funcionar bem sem isso.

Agora vamos escrever nosso primeiro teste de falha.

descrever('Meu primeiro teste', Assim, () => {
isto('Não faz muito!', Assim, () => {
esperar(verdadeiro).para.igual(falso)
})
})

Depois de economizar novamente, você verá o Cypress exibir o teste de falha em vermelho desdeverdadeironão é igualfalso.

O CYPRESS também exibe o rastreamento da pilha e o quadro de código onde a assertionFailed (quando disponível).Você pode clicar no link do arquivo azul para abrir o arquivo onde ocorreu o erro emSeu abridor de arquivos preferido.Para ler mais sobre a tela do erro, leia sobreErros de depuração.

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (6)

Ciprestefornece uma estrutura visual de supostos, testes e afirmações.Em breve, você também verá comandos, eventos de página, solicitações de rede e muito mais.

Info

O que sãodescrever, Assim,isto, eesperar?

Todas essas funções vêm deBibliotecas em pacoteEsse cipreste assa.

  • descrevereistovem de ondeMocha
  • esperarvem deChai

O Cypress se baseia nessas ferramentas e estruturas populares que vocêesperançosamentejá tem alguma familiaridade e conhecimento de.Caso contrário, tudo bem também.

dica

Usando Eslint?

Confira o nossoCypress eslint Plugin.

Escreva arealteste

Um teste sólido geralmente abrange 3 fases:

  1. Configure o estado do aplicativo.
  2. Tomar uma ação.
  3. Faça uma afirmação sobre o estado de aplicação resultante.

Você também pode ver isso formalista como "dado, quando, depois" ou "organize, agir, afirmar".Mas a idéia é: primeiro você coloca o aplicativo em um estado específico, depois toma alguma ação no aplicativo que faz com que ele mude e, finalmente, verifica o estado de aplicativo resultante.

Hoje, teremos uma visão estreita dessas etapas e as mapearemos de maneira limpa para o CypressCommands:

  1. Visite uma página da web.
  2. Consulta para um elemento.
  3. Interagir com esse elemento.
  4. Afirme sobre o conteúdo na página.

Etapa 1: Visite uma página

Primeiro, vamos visitar uma página da web.Vamos visitar nossoPia da cozinhaAplicação neste exemplo, para que você possa tentar o Cypress sem precisar se preocupar em encontrar uma página para testar.

Podemos passar no URL que queremos visitar paracy.visit (). Vamos substituir nosso teste anterior pelo abaixo que realmente visita uma página:

descrever('Meu primeiro teste', Assim, () => {
isto('Visita a pia da cozinha', Assim, () => {
cy.Visita('https://example.cypress.io')
})
})

Salve o arquivo e mude novamente para o Cypress Test Runner.Você pode notar algumas coisas:

  1. OLog de comandoagora mostra o novoVISITAAção.
  2. A aplicação da pia da cozinha foi carregada noVisualização do aplicativoPaine.
  3. O teste é verde, apesar de não fazermos afirmações.
  4. OVISITAexibe aEstado azul pendenteaté que a página termine de carregar.

Se esse pedido voltou com um não2xxcódigo de status como404ou500, ou se houve um erro de JavaScript no código do aplicativo, o teste falharia.

perigo

Testando aplicativos que você não controla

Neste guia, estamos testando nosso aplicativo de exemplo:https://exemplo.cypress.io.No entanto, você deve pensar cuidadosamente sobre testar aplicativos que vocêNão controle.Por que?

  • Eles têm o potencial de mudar a qualquer momento, o que quebrará os testes.
  • Eles podem fazer testes A/B, o que torna impossível obter resultados consistentes.
  • Eles podem detectar que você é um script e bloqueia seu acesso.
  • Eles podem ter recursos de segurança ativados que impedem o funcionamento do Cypress.

De um modo geral, o objetivo do Cypress é ser uma ferramenta que você usa todos os dias, Tobuild e testar seus próprios aplicativos, não uma ferramenta de automação da Web de uso geral.de boas razões para fazer exceções para certos tipos de aplicação:

  • Eles são projetados especificamente para se integrar a terceiros, por exemplo,SSOPROVIDERS.
  • Eles fornecem um serviço complementar, por exemploPainéis de controle SaaS Oranalytics.
  • Eles reutilizam seu conteúdo ou fornecem plugins para um aplicativo que você controla.

A chave aqui é avaliar cuidadosamente os benefícios dos testes em questão contra a possível interrupção e flocos que esses tipos de testes podem introduzir.

Etapa 2: Consulta para um elemento

Agora que temos uma página carregada, precisamos tomar alguma ação sobre ela.Por que não clicamos em um link na página?Parece fácil o suficiente, vamos procurar um Welike ... que taltipo?

Para encontrar este elemento por seu conteúdo, usaremoscy.contains ().

Vamos adicioná -lo ao nosso teste e ver o que acontece:

descrever('Meu primeiro teste', Assim, () => {
isto('encontra o conteúdo "Tipo"', Assim, () => {
cy.Visita('https://example.cypress.io')

cy.contém('tipo')
})
})

Nosso teste agora deve ser exibidoContémnoLog de comandoe ainda ser verde.

Mesmo sem adicionar uma afirmação, sabemos que está tudo bem!Isso ocorre porque muitos dos comandos do Cypress são construídos para falhar se não encontrarem o que esperam encontrar.Isso é conhecido como umAfirmação implícita.

Para verificar isso, substituatipocom algo não na página, comomoda. Você notará que o teste fica vermelho, mas somente depois de cerca de 4 segundos!

Você pode ver o que o Cypress está fazendo sob o capô?Está esperando automaticamente e retirando porque espera que o conteúdoeventualmenteser encontrado no DOM. Não falha imediatamente!

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (7)

Cuidado

Mensagens de erro

Cuidamos do Cypress para escrever centenas de mensagens de erro personalizadas que se destacam para explicar claramente o que deu errado.Nesse caso, Cypressultrafase cronometradaPara encontrar o conteúdomodadentro de toda a página.Para ler mais sobre a exibição de erros, leia sobreErros de depuração.

Antes de adicionar outro comando - vamos recuperar esse teste.Substituirmodacomtipo.

Etapa 3: Clique em um elemento

Ok, agora queremos clicar no link que encontramos.Como fazemos isso?Adicione a.clique()Comando até o final do comando anterior, gosta de:

descrever('Meu primeiro teste', Assim, () => {
isto('Clique no link "Tipo"', Assim, () => {
cy.Visita('https://example.cypress.io')

cy.contém('tipo').clique()
})
})

Você quase pode ler como uma pequena história!O Cypress chama isso de "encadeamento" e Wechain juntos comandos para criar testes que realmente expressam o que o aplicativo faz de maneira declarativa.

Observe também que oVisualização do aplicativoO painel se atualizou ainda mais após o clique, seguindo o link e mostrando a página de Odestinação:

Agora podemos afirmar algo sobre esta nova página!

Info

✨ O IntelliSense está disponível em seus arquivos de especificações do Cypress, adicionando uma linha de comentários de barra especializada.Ler sobreConclusão inteligente de código.

Etapa 4: faça uma afirmação

Vamos fazer uma afirmação sobre algo na nova página em que clicamos.Perhapswe gostaria de garantir que o novo URL seja o URL esperado.Podemos fazer isso analisando o URL e encadeando uma afirmação com ele com.deve().

Aqui está o que parece:

descrever('Meu primeiro teste', Assim, () => {
isto('Clicar em "Tipo" navega para um novo URL', Assim, () => {
cy.Visita('https://example.cypress.io')

cy.contém('tipo').clique()

// deve estar em um novo URL que
// inclui '/comandos/ações'
cy.url().deve('incluir', Assim, '/Commands/Ações')
})
})

Adicionando mais comandos e afirmações

Não estamos limitados a uma única interação e afirmação em um determinado teste.De fato, muitas interações em um aplicativo podem exigir várias etapas e a Areliyly alterar seu estado de aplicação de mais de uma maneira.

Podemos continuar as interações e afirmações neste teste adicionando outra cadeia para interagir e verificar o comportamento dos elementos nesta nova página.

Podemos usarcy.get ()Para selecionar um elemento baseado na classe deles.Então podemos usar o.tipo()comando para inserir textint a entrada selecionada.Finalmente, podemos verificar se o valor do inputReflect o texto que foi digitado com outro.deve().

Em geral, a estrutura do seu teste deve fluir consulta -> consulta -> ORASSERTION (s) comando (s).É uma prática recomendada não encadear nada após um comando de ação; para obter mais detalhes sobre por que isso é, veja nosso guia sobrecapacidade de repetição.

descrever('Meu primeiro teste', Assim, () => {
isto('Recebe, tipos e afirma', Assim, () => {
cy.Visita('https://example.cypress.io')

cy.contém('tipo').clique()

// deve estar em um novo URL que
// inclui '/comandos/ações'
cy.url().deve('incluir', Assim, '/Commands/Ações')

// Obtenha uma entrada, digite nele
cy.pegar('.Action-email').tipo('[EmailProtected]')

// Verifique se o valor foi atualizado
cy.pegar('.Action-email').deve('tem.value', Assim, '[EmailProtected]')
})
})

Cuidado

Normalmente, não sugerimos selecionar e encontrar elementos por seus nomes de classes, mas o fazemos aqui, já que estamos consultando um site externo, e às vezes é com quem temos que trabalhar.

Para obter mais informações sobre nossas orientações sobre as melhores práticas de seletor, consulte o nosso guiaaqui.

E aí está: um breve teste em Cypress que visita uma página, encontra e clica em um link, verifica o URL e verifica o comportamento de um elemento na nova página.Se lemos em voz alta, pode parecer:

observação

  1. Visita:https://exemplo.cypress.io
  2. Encontre o elemento com conteúdo:tipo
  3. Clique nisso
  4. Obtenha o URL
  5. Afirmar que inclui:/comandos/ações
  6. Obtenha a entrada com oação-emailTestes de dados
  7. Tipo[EmailProtected]na entrada
  8. Afirmar a entrada reflete o novo valor

Ou noDado, Assim,Quando, Assim,Entãosintaxe:

observação

  1. Dadoum usuário visitahttps://exemplo.cypress.io
  2. QuandoEles clicam no link rotuladotipo
  3. E eles digitam "[EmailProtected]" no[Data Tests = "Action-Email"]entrada
  4. Entãoo URL deve incluir/comandos/ações
  5. E a[Data Tests = "Action-Email"]a entrada tem "[EmailProtected]"Como seu valor

E ei, este é um teste muito limpo!Não tivemos que dizer nada sobrecomoAs coisas funcionam, apenas que gostaríamos de verificar uma série específica de eventos e resultados.

Info

Transições de página

Vale a pena notar que esse teste passou em duas páginas diferentes.

  1. A inicialcy.visit ()
  2. O.clique()para uma nova página

Cypress detecta automaticamente coisas como umEvento de transição de páginae WillautomaticamenteHALTexecutando comandos até a próxima página terfinalizadocarregando.

Tinha opróxima páginaNão terminou sua fase de carregamento, o Cypress teria terminado o teste e apresentado um erro.

Sob o capô - isso significa que você não precisa se preocupar com os comandos acidentalmente em uma página obsoleta, nem precisa se preocupar em executar comandos de uma página parcialmente carregada.

Mencionamos anteriormente que o Cypress esperou4 segundosAntes de cronometrar, preencher um elemento DOM - mas neste caso, quando o Cypress detecta umEvento de transição de páginaaumenta automaticamente o tempo limite para60 segundospara o singleCarregamento de páginaevento.

Em outras palavras, com base nos comandos e nos eventos que acontecem, a cypresautomaticamente altera seus tempos limites esperados para corresponder ao comportamento do aplicativo da web.

Esses vários tempos de tempo são definidos noConfiguraçãodocumento.

Registre testes com o Cypress Studio

Se você deseja uma abordagem mínima de código para criar testes, você pode usarCypress StudioPara gravar suas interações de navegação e gerar testes.Visite nossoguiaPara maiores informações.

Próximos passos

  • Pegue nosso grátisTestando seu primeiro aplicativocurso.
  • Saiba mais sobre oCYPRESS APPUi.
  • Começartestando seu aplicativo.
  • ConfigurarConclusão inteligente de códigoPara comandos e afirmações do Cypress.
  • Registre seus resultados de teste paraCypress CloudRecursos obscurecidos como paralelização, detecção de flocos e muito mais.
  • Confira aApp do mundo real (RWA)Demonstrações adicionais de práticas de teste de cipreste, configuração e estratégias em um projeto do mundo real.
  • Pesquise a documentação de Cypress para encontrar rapidamente o que você precisa.

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (8)

Teste de ponta a ponta: seu primeiro teste com Cypress |Documentação do Cypress (2024)

References

Top Articles
Latest Posts
Article information

Author: Lakeisha Bayer VM

Last Updated:

Views: 5603

Rating: 4.9 / 5 (69 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Lakeisha Bayer VM

Birthday: 1997-10-17

Address: Suite 835 34136 Adrian Mountains, Floydton, UT 81036

Phone: +3571527672278

Job: Manufacturing Agent

Hobby: Skimboarding, Photography, Roller skating, Knife making, Paintball, Embroidery, Gunsmithing

Introduction: My name is Lakeisha Bayer VM, I am a brainy, kind, enchanting, healthy, lovely, clean, witty person who loves writing and wants to share my knowledge and understanding with you.