Introdução aos Testes End-to-End com Cypress

Posted by

Testes end-to-end ou E2E são essenciais para garantir que uma aplicação web funcione corretamente do início ao fim. O Cypress é um framework de automação de testes front-end amplamente utilizado por sua simplicidade, velocidade e capacidade de executar testes diretamente no navegador.

Neste guia completo você aprenderá como implementar um teste ponta a ponta usando Cypress simulando o processo de login com validação de credenciais inválidas e redirecionamento correto para a tela do dashboard após o acesso bem-sucedido.

Por Que Usar Cypress Para Testes E2E

Cypress é uma ferramenta moderna de automação de testes front-end, projetada especificamente para aplicações web dinâmicas. Sua simplicidade, velocidade e feedback visual em tempo real fazem dele uma escolha popular entre desenvolvedores.

Principais vantagens:

  • Execução direta no navegador
  • Interface gráfica intuitiva
  • Suporte a frameworks como React, Vue e Angular
  • Depuração fácil com logs detalhados
  • Funciona bem em pipelines de CI/CD

Principais Tipos de Testes Realizados com Cypress

Com Cypress, você pode automatizar diversos cenários do usuário. Alguns dos tipos de testes mais comuns são:

Tipo de TesteDescrição
Validação de LoginTesta autenticação com credenciais válidas e inválidas
Navegação entre PáginasConfirma que links internos redirecionam corretamente
Interação com FormuláriosSimula preenchimento, submissão e validação
Mensagens de ErroVerifica se mensagens aparecem quando esperadas
Fluxos CompletosTesta processos completos como cadastro ou checkout

Principais Comandos do Cypress

Abaixo estão alguns dos comandos mais utilizados na escrita de testes E2E com Cypress:

ComandoDescriçãoExemplo
cy.visit()Acessa uma URL específicacy.visit('/login')
cy.get()Seleciona elementos da páginacy.get('#email')
cy.type()Digita texto em campos de entradacy.get('#password').type('senha123')
cy.click()Clica em um elementocy.get('button[type="submit"]').click()
cy.contains()Encontra elementos pelo texto visívelcy.contains('Entrar')
cy.url().should()Verifica a URL atualcy.url().should('include', '/dashboard')
cy.contains().should('be.visible')Confirma que um elemento está visívelcy.contains('Senha incorreta').should('be.visible')
cy.fixture()Carrega arquivos JSON ou outros fixoscy.fixture('usuarios.json')
cy.intercept()Intercepta requisições HTTPcy.intercept('POST', '/api/login', { status: 200 })

Configuração Inicial do Cypress

Antes de escrever os testes certifique-se de instalar o Cypress em seu projeto Node.js:

npm install cypress --save-dev

Para iniciar a interface gráfica do Cypress execute:

npx cypress open

Esse comando cria a estrutura padrão de pastas incluindo cypress/e2e onde devem ser criados os arquivos de teste com extensão .cy.js ou .cy.ts.

Estrutura da Aplicação

Vamos considerar uma aplicação com duas rotas principais:

  • /login – Página de autenticação do usuário.
  • /dashboard – Página acessada após login bem-sucedido.

O objetivo dos testes será:

  1. Acessar a página de login.
  2. Validar mensagem de erro ao tentar entrar com credenciais incorretas.
  3. Realizar login com sucesso e verificar navegação correta para o dashboard.

Código HTML da Tela de Login

Abaixo está o exemplo da tela de login utilizada nos testes. Ele contém os elementos básicos necessários para interação com o Cypress:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8" />
  <title>Login</title>
</head>
<body>
  <h1>Faça seu login</h1>

  <form id="loginForm">
    <label for="email">E-mail:</label>
    <input type="email" id="email" name="email" required />

    <label for="password">Senha:</label>
    <input type="password" id="password" name="password" required />

    <button type="submit">Entrar</button>
  </form>

  <div id="error-message" style="color: red; display: none;">
    Credenciais inválidas. Tente novamente.
  </div>

  <script>
    document.getElementById('loginForm').addEventListener('submit', function(e) {
      e.preventDefault();

      const email = document.getElementById('email').value;
      const password = document.getElementById('password').value;
      const errorMessage = document.getElementById('error-message');

      errorMessage.style.display = 'none';

      if (email === '[email protected]' && password === 'senhacorreta') {
        window.location.href = '/dashboard';
      } else {
        errorMessage.style.display = 'block';
      }
    });
  </script>
</body>
</html>

Código HTML da Tela do Dashboard

Aqui está um exemplo básico da tela de dashboard acessada após login bem-sucedido:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8" />
  <title>Dashboard</title>
</head>
<body>
  <h1>Bem-vindo ao Dashboard</h1>
  <p>Esta é a área restrita do usuário autenticado.</p>
</body>
</html>

Escrevendo o Teste com Cypress

Com as páginas configuradas agora vamos criar o arquivo de teste dentro da pasta cypress/e2e. Abaixo está o código do teste Cypress que cobre os cenários descritos:

describe('Teste de Login com Cypress', () => {
  beforeEach(() => {
    cy.visit('/login');
  });

  it('Deve exibir mensagem de erro ao inserir credenciais inválidas', () => {
    cy.get('#email').type('[email protected]');
    cy.get('#password').type('senhaerrada');
    cy.get('button[type="submit"]').click();

    cy.contains('Credenciais inválidas. Tente novamente.').should('be.visible');
  });

  it('Deve redirecionar para o dashboard após login bem-sucedido', () => {
    cy.get('#email').type('[email protected]');
    cy.get('#password').type('senhacorreta');
    cy.get('button[type="submit"]').click();

    cy.url().should('include', '/dashboard');
    cy.contains('Bem-vindo ao Dashboard').should('be.visible');
  });
});

Este código demonstra como Cypress permite simular ações do usuário de forma clara e eficiente. Os seletores usados estão alinhados com os IDs definidos na estrutura HTML da tela de login.

Vantagens de Usar Cypress para Testes E2E

O Cypress oferece diversas vantagens sobre outras ferramentas de automação de testes:

  • Velocidade: Executa rapidamente sem depender de drivers externos.
  • Feedback visual imediato: Mostra em tempo real cada passo do teste.
  • Ferramentas de depuração integradas: Permite inspecionar elementos logs e até mesmo fazer screenshots automáticas.
  • Gratuito e de código aberto: Ideal para projetos pequenos e grandes.

Conclusão

Implementar testes ponta a ponta com Cypress é uma prática eficaz para validar o fluxo completo de uma aplicação. Este artigo mostrou como realizar testes reais de login com validação de mensagens de erro e navegação para o dashboard.

Ao seguir este exemplo você pode adaptar o conteúdo para seus próprios projetos garantindo maior confiabilidade e qualidade no desenvolvimento front-end.

Se precisar de ajuda para configurar um ambiente local com servidor web ou integrar Cypress a frameworks como React Vue ou Angular posso te ajudar nisso também.

One comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *