🧩 Exercícios: Testes no Front-End com Vitest e Testing Library
Spec Frontend Com React • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 16.1 — Teste de Renderização e Asserções com screen.getByText
Contexto: Teste de Renderização e Asserções com screen.getByText no contexto de Testes no Front-End com Vitest e Testing Library.
Requisitos de Execução:
- Testar componente
<Botao texto='Entrar' />conferindo presença do texto e papel acessível com@testing-library/react.
Resultado Esperado
Teste unitário de componente executado com 100% de cobertura com Vitest.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_1_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes no Front-End com Vitest e Testing Library
🔑 Gabarito de Código & Solução Comentada
// Botao.test.tsx
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { Botao } from './Botao';
describe('Botao Component', () => {
it('renderiza o texto corretamente', () => {
render(<Botao texto="Entrar" />);
expect(screen.getByRole('button', { name: /entrar/i })).toBeInTheDocument();
});
});
🔍 Nível 2: Prática
Problema 16.2 — Simulação de Eventos do Usuário com userEvent
Contexto: Simulação de Eventos do Usuário com userEvent no contexto de Testes no Front-End com Vitest e Testing Library.
Requisitos de Execução:
- Testar preenchimento de formulário e clique de botão com
@testing-library/user-event.
Resultado Esperado
Evento de digitação e clique simulados com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_2_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes no Front-End com Vitest e Testing Library
🔑 Gabarito de Código & Solução Comentada
// Form.test.tsx
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { FormLogin } from './FormLogin';
it('permite o usuario digitar credenciais', async () => {
const user = userEvent.setup();
render(<FormLogin />);
const input = screen.getByPlaceholderText(/email/i);
await user.type(input, 'admin@teste.com');
expect(input).toHaveValue('admin@teste.com');
});
⚡ Nível 3: Integração
Problema 16.3 — Mock de Requisições HTTP com MSW (Mock Service Worker)
Contexto: Mock de Requisições HTTP com MSW (Mock Service Worker) no contexto de Testes no Front-End com Vitest e Testing Library.
Requisitos de Execução:
- Configurar handlers MSW para interceptar chamadas GET
/api/produtose testar renderização da lista.
Resultado Esperado
Requisição HTTP interceptada pelo MSW e renderizada no componente.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_3_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes no Front-End com Vitest e Testing Library
🔑 Gabarito de Código & Solução Comentada
// mswHandlers.ts
import { http, HttpResponse } from 'msw';
export const handlers = [
http.get('/api/produtos', () => {
return HttpResponse.json([{ id: 1, nome: 'Teclado Mock' }]);
}),
];
🏆 Nível 4: Desafio Corporativo
Problema 16.4 — Testes de Custom Hooks com renderHook e act
Contexto: Testes de Custom Hooks com renderHook e act no contexto de Testes no Front-End com Vitest e Testing Library.
Requisitos de Execução:
- Testar lógica do hook
useContadorisoladamente comrenderHook(() => useContador()).
Resultado Esperado
Custom hook testado isoladamente sem necessidade de montar componente de UI.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_4_SeuNome - Envie na tarefa:
Atividade Cap 16 - Testes no Front-End com Vitest e Testing Library
🔑 Gabarito de Código & Solução Comentada
// useContador.test.ts
import { renderHook, act } from '@testing-library/react';
import { useContador } from './useContador';
it('incrementa contador', () => {
const { result } = renderHook(() => useContador());
act(() => { result.current.incrementar(); });
expect(result.current.count).toBe(1);
});