Sobes.tech
Middle

Fale sobre os testes da parte cliente da aplicação.

sobes.tech IA

Resposta da IA

Os testes do lado do cliente da aplicação (testes de frontend) destinam-se a verificar o funcionamento correto da interface de utilizador e a sua interação. O objetivo principal é garantir que a aplicação parece, se comporta e funciona corretamente do ponto de vista do utilizador final em diferentes dispositivos e navegadores.

Tipos de testes do lado do cliente:

  • Teste visual (Visual Testing): Verificação da aparência dos elementos da interface, conformidade com os layouts e designs, ausência de sobreposições, deslocamentos e outros defeitos visuais.
  • Teste funcional (Functional Testing): Verificação do funcionamento correto de todos os elementos interativos (botões, formulários, links, etc.) e da lógica de negócio implementada no lado do cliente.
  • Teste entre navegadores (Cross-browser Testing): Verificação da exibição e funcionalidade da aplicação em diferentes navegadores web (Chrome, Firefox, Safari, Edge, etc.) e suas versões.
  • Teste multiplataforma (Cross-platform Testing): Verificação do funcionamento da aplicação em diferentes sistemas operativos (Windows, macOS, Linux) e suas versões.
  • Teste de desempenho (Performance Testing): Avaliação da velocidade de carregamento das páginas, capacidade de resposta da interface, uso de memória e CPU no lado do cliente.
  • Teste de usabilidade (Usability Testing): Avaliação da facilidade e intuitividade da interface para o utilizador, verificando o cumprimento dos padrões UX/UI.
  • Teste de acessibilidade (Accessibility Testing): Verificação do cumprimento dos padrões de acessibilidade (por exemplo, WCAG) para utilizadores com limitações.
  • Teste de responsividade (Responsive Testing): Verificação da exibição correta e funcionamento da aplicação em dispositivos com diferentes tamanhos de ecrã (escritórios, tablets, telemóveis).
  • Teste de segurança (Security Testing): Verificação de vulnerabilidades no lado do cliente, como Cross-Site Scripting (XSS) ou Cross-Site Request Forgery (CSRF), autenticação e autorização do utilizador no lado do cliente.

Ferramentas para automatizar os testes do lado do cliente:

  • Para testes E2E (End-to-End) e de integração: Selenium, Cypress, Playwright.
  • Para testes unitários e de componentes (dependendo do framework): Jest, Mocha, Jasmine (para JavaScript/TypeScript), Testing Library, Enzyme.
  • Para testes visuais: Applitools, Percy.
  • Para testes de desempenho: Lighthouse, WebPageTest.
  • Para testes de acessibilidade: Axe DevTools, WAVE.

Exemplo de teste usando Cypress:

// cypress/integration/example.spec.js
describe('Teste da página principal', () => {
  beforeEach(() => {
    cy.visit('/'); // Acesso à página principal
  });

  it('Verifica o título da página', () => {
    cy.title().should('eq', 'Nome da aplicação'); // Verificação do título da aba do navegador
  });

  it('Verifica a presença de um elemento chave na página', () => {
    cy.get('h1').should('contain', 'Bem-vindo'); // Verificação da presença de um elemento h1 com texto específico
  });

  it('Verifica o funcionamento do botão', () => {
    cy.get('button#myButton').click(); // Clicar no botão com id 'myButton'
    cy.get('.success-message').should('be.visible'); // Verificação de que a mensagem de sucesso está visível
  });
});

Exemplo de teste usando Jest e React Testing Library para um componente React:

// src/components/Button/Button.test.js
import { render, screen, fireEvent } from '@testing-library/react';
import Button from './Button';

describe('Teste do componente Button', () => {
  it('O botão é exibido com o texto correto', () => {
    render(<Button text="Clique em mim" />);
    const buttonElement = screen.getByText(/Clique em mim/i);
    expect(buttonElement).toBeInTheDocument(); // Verifica se o elemento do botão está no documento
  });

  it('O manipulador de clique é chamado ao clicar no botão', () => {
    const handleClick = jest.fn(); // Função mock
    render(<Button text="Clique em mim" onClick={handleClick} />);
    const buttonElement = screen.getByText(/Clique em mim/i);
    fireEvent.click(buttonElement); // Simula o clique
    expect(handleClick).toHaveBeenCalledTimes(1); // Verifica se a função mock foi chamada uma vez
  });
});

A estratégia de testes do lado do cliente depende da arquitetura da aplicação, das tecnologias utilizadas e dos requisitos. Geralmente, aplica-se a pirâmide de testes: mais testes unitários, menos testes de integração e E2E. Os testes manuais continuam importantes para verificar a usabilidade e os aspetos visuais que são difíceis de cobrir totalmente com automação.