Testes de um componente React com Vitest e Testing Library
Cole um componente React e obtenha um plano de testes, o ficheiro de testes com consultas por papel, user-event e mocks de rede com MSW, mais a configuração em falta. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Intermédio · Código · Pendente de revisão editorial
Prompt
Atua como engenheiro de qualidade frontend especialista em Testing Library e em testes que verificam comportamento, não detalhes de implementação.
Contexto:
- Código do componente: {{codigo_componente}}
- Comportamento a cobrir: {{comportamento}}
- Ferramentas: {{ferramentas}}
- Chamadas de rede: {{rede}}
Se o componente depender de contextos, rotas ou providers que não aparecem no código, pergunta-me como são montados antes de escreveres os testes.
Entregáveis:
1. Plano de testes em tabela: caso, tipo (renderização, interação, erro, acessibilidade), prioridade.
2. O ficheiro de testes completo: primeiro consultas por papel e nome acessível (`getByRole`), `userEvent` em vez de `fireEvent`, `findBy` para o que é assíncrono e asserções sobre o que o utilizador vê.
3. Mocks de rede conforme {{rede}}, com um caso de sucesso, um de erro e um de carregamento lento, se aplicável.
4. Um helper `renderWithProviders` se forem precisos providers.
5. A configuração mínima, se não existir: ambiente jsdom ou happy-dom, ficheiro de setup com os matchers do jest-dom e os scripts do package.json.
6. As lacunas de cobertura que ficam e porque não compensa cobri-las com testes unitários (por exemplo, por serem de um teste end-to-end).
Restrições:
- Nada de testes de snapshot, salvo justificação.
- Não acedas a estado interno, classes CSS nem `data-testid` se existir uma consulta acessível.
- Se ao escrever os testes detetares um erro ou um problema de acessibilidade no componente, avisa-me à parte; não o corrijas em silêncio.
- Não inventes props nem textos que não estejam no código; usa [PREENCHER] se faltar algo.
Formato: plano, blocos de código com nome do ficheiro e lista de comandos para executar.Como utilizar
- Cola o componente completo e, se existirem, os seus hooks ou serviços. 2. Descreve em linguagem simples o que deve fazer do ponto de vista do utilizador. 3. Corre os testes e cola eventuais erros para iterar.
Exemplo de utilização
Componente: ResumoCarrinho.tsx (lista de produtos, alteração de quantidade, botão de pagar) · Comportamento: recalcula o total e mostra erro se o pagamento falhar · Ferramentas: Vitest + RTL · Rede: MSW.
Exemplo de resultado
Plano de testes
| Caso | Tipo | Prioridade |
|---|---|---|
| Alterar a quantidade recalcula o total | Interação | Alta |
| Pagar fica desativado durante o processamento | Interação | Alta |
| Erro visível se a API falhar | Erro | Alta |
ResumoCarrinho.test.tsx
import { afterAll, afterEach, beforeAll, expect, it } from 'vitest';
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { http, HttpResponse, delay } from 'msw';
import { setupServer } from 'msw/node';
import { ResumoCarrinho } from './ResumoCarrinho';
const server = setupServer(http.post('/api/pagamento', () => HttpResponse.json({ ok: true }))); // [PREENCHER: endpoint real]
beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());
it('recalcula o total quando a quantidade muda', async () => {
const user = userEvent.setup();
render(<ResumoCarrinho />);
const quantidade = screen.getByRole('spinbutton', { name: /quantidade/i });
await user.clear(quantidade);
await user.type(quantidade, '3');
expect(screen.getByText(/total/i)).toHaveTextContent('[PREENCHER: total esperado]');
});
it('desativa Pagar e mostra um erro se a API falhar', async () => {
server.use(http.post('/api/pagamento', async () => { await delay(100); return new HttpResponse(null, { status: 500 }); }));
const user = userEvent.setup();
render(<ResumoCarrinho />);
const pagar = screen.getByRole('button', { name: /pagar/i });
await user.click(pagar);
expect(pagar).toBeDisabled();
expect(await screen.findByRole('alert')).toBeInTheDocument();
});
As consultas por papel vão falhar se o campo não tiver etiqueta acessível: nesse caso, o problema está no componente, não no teste…
Dados-chave
- Categoria
- Programação e desenvolvimento · React
- Tipo de resultado
- Código
- Nível
- Intermédio
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Código do componente, Comportamento a cobrir, Ferramentas e Chamadas de rede
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Porquê consultar por papel em vez de data-testid?
Porque assim o teste usa a página como um utilizador real ou uma tecnologia de apoio. Se o teste não encontra um botão pelo papel e pelo nome, um leitor de ecrã provavelmente também não.
O que é o MSW e porquê usá-lo?
O Mock Service Worker interceta os pedidos de rede nos testes. Permite testar o componente com respostas realistas sem simular o fetch à mão em cada teste.
Para que serve este prompt?
Cole um componente React e obtenha um plano de testes, o ficheiro de testes com consultas por papel, user-event e mocks de rede com MSW, mais a configuração em falta.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Código do componente, Comportamento a cobrir, Ferramentas e Chamadas de rede). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.