Sobes.tech
Junior

Fale-nos sobre a sua experiência com testes em projetos.

sobes.tech IA

Resposta da IA

Nos projetos, utilizei vários tipos de testes para garantir a qualidade do frontend:

  1. Testes unitários: Com Jest e React Testing Library para isolar e verificar componentes, funções e módulos individuais. Isso ajuda a detectar erros lógicos rapidamente em partes pequenas e independentes do código.

    // Exemplo de teste unitário de um componente Button com Jest e React Testing Library
    import { render, screen } from '@testing-library/react';
    import Button from './Button';
    
    test('renderiza o botão com o texto correto', () => {
      render(<Button>Click Me</Button>);
      const buttonElement = screen.getByText(/Click Me/i);
      expect(buttonElement).toBeInTheDocument();
    });
    
  2. Testes de integração: Para verificar a interação entre vários componentes ou módulos. Isso ajuda a garantir que as diferentes partes do sistema funcionem corretamente juntas. Também usei React Testing Library para isso.

    // Exemplo de teste de integração de um formulário e botão de envio
    import { render, screen, fireEvent } from '@testing-library/react';
    import Form from './Form';
    
    test('ao enviar o formulário, chama onSubmit com os dados corretos', () => {
      const mockSubmit = jest.fn();
      render(<Form onSubmit={mockSubmit} />);
    
      const input = screen.getByLabelText(/Username:/i);
      const submitButton = screen.getByRole('button', { name: /Submit/i });
    
      fireEvent.change(input, { target: { value: 'testuser' } });
      fireEvent.click(submitButton);
    
      expect(mockSubmit).toHaveBeenCalledWith({ username: 'testuser' });
    });
    
  3. Testes E2E: Em alguns projetos, usei Cypress ou Playwright para testar cenários de usuário de ponta a ponta em um navegador real. Isso ajuda a verificar se a aplicação como um todo funciona como esperado para o usuário final.

    // Exemplo de teste E2E com Cypress
    // cypress/integration/todo.spec.js
    describe('Aplicação Todo', () => {
      it('deve adicionar um novo item de tarefa', () => {
        cy.visit('/'); // Navegar até a página da aplicação
    
        cy.get('.new-todo').type('Buy milk{enter}'); // Digitar e pressionar Enter
    
        cy.get('.todo-list li')
          .should('have.length', 1) // Verificar o número de elementos
          .first()
          .should('have.text', 'Buy milk'); // Verificar o texto do primeiro elemento
      });
    });
    
  4. Testes de snapshot: Com Jest, para capturar a estrutura do componente e detectar mudanças não intencionais na marcação (por exemplo, após refatoração).

    // Exemplo de teste de snapshot de um componente Card com Jest
    import renderer from 'react-test-renderer';
    import Card from './Card';
    
    test('Card renderiza corretamente', () => {
      const tree = renderer
        .create(<Card title="Test Title">Test Content</Card>)
        .toJSON();
      expect(tree).toMatchSnapshot(); // Comparar com o snapshot salvo
    });
    

Acredito que os testes sejam uma parte importante do processo de desenvolvimento, pois ajudam a manter a qualidade do código, facilitam a refatoração e reduzem a probabilidade de erros em produção. Pratico escrever testes juntamente com o desenvolvimento de novas funcionalidades ou antes de corrigir bugs (abordagem TDD, quando aplicável).