Pular para o conteúdo
Skillpedia
Testes280 mil · #114

react-testing

Faz seu agente escrever testes para componentes React. Ele usa ferramentas para verificar se tudo funciona bem, incluindo acessibilidade.

O que ela faz

Ajuda a testar componentes de software feitos com React. Isso garante que eles funcionem como esperado para o usuário final, verificando o que é exibido na tela e como o usuário interage com eles.

Quando usar

  • ✓Ao criar novos componentes em React.
  • ✓Ao corrigir problemas em componentes existentes.
  • ✓Para garantir que componentes não quebrem após mudanças.

Exemplo do que pedir para a IA

“Teste o componente de login para garantir que o usuário possa digitar email e senha e clicar no botão de enviar.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/react-testing/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/react-testing/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele usa ferramentas que simulam um navegador para renderizar seus componentes e interagir com eles, como se um usuário real estivesse usando. Isso ajuda a encontrar erros antes que os usuários os vejam.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill react-testing

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/react-testing/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Testes com React

Padrões abrangentes de testes com React para testes de componentes focados em comportamento, testes de hooks customizados, asserções de acessibilidade e mock de requisições em nível de rede.

Quando Ativar

  • Escrevendo testes para componentes React, hooks customizados ou páginas
  • Adicionando cobertura de testes a componentes legados sem testes
  • Migrando de Enzyme ou padrões da era de componentes de classe para React Testing Library
  • Configurando Vitest ou Jest para um novo projeto React
  • Simulando requisições HTTP em testes
  • Verificando violações de acessibilidade
  • Decidindo quais testes pertencem ao RTL vs. Playwright Component Testing vs. E2E completo

Princípio Central

Teste o que o usuário vê e faz, não os detalhes de implementação.

Um teste deve:

  • Renderizar o componente com os mesmos provedores que ele tem em produção
  • Interagir com ele através de queries acessíveis (role, label) e userEvent
  • Afirmar a saída visível e efeitos colaterais observáveis (callback disparado, requisição enviada)

Um teste NÃO deve:

  • Inspecionar o estado do componente, props passadas para filhos, ou quais hooks foram chamados
  • Simular o próprio React ou hooks do framework
  • Afirmar o número de renderizações ou a estrutura do DOM além do que afeta os usuários

Escolha da Biblioteca

Runner Quando Observação
Vitest Vite, Remix, configurações modernas Mais rápido, ESM nativo, API compatível com Jest
Jest Next.js, CRA, repositórios estabelecidos Padrão para muitos projetos React
Playwright Component Testing Motor de navegador real necessário Use quando JSDOM não tiver o recurso necessário
Cypress Component Testing Navegador real, Cypress já em uso Alternativa ao Playwright CT

Escolha um. Não execute RTL + Vitest E Playwright CT no mesmo repositório, a menos que você tenha uma separação clara de responsabilidades.

Prioridade de Queries

React Testing Library expõe queries em três níveis — use de cima para baixo:

  1. Acessível a todos: getByRole, getByLabelText, getByPlaceholderText, getByText, getByDisplayValue
  2. Semântico: getByAltText, getByTitle
  3. Test IDs (válvula de escape): getByTestId
// Best
screen.getByRole("button", { name: /save/i });

// OK for inputs
screen.getByLabelText("Email");

// Last resort
screen.getByTestId("save-btn");

Variantes:

  • getBy* — lança um erro se não encontrar correspondência
  • queryBy* — retorna null (use para "afirmar ausência")
  • findBy* — assíncrono, retorna uma Promise (use para elementos que aparecem após trabalho assíncrono)

Interação do Usuário com userEvent

import userEvent from "@testing-library/user-event";

test("submits the form", async () => {
  const user = userEvent.setup();
  const onSubmit = vi.fn();
  render(<UserForm onSubmit={onSubmit} />);

  await user.type(screen.getByLabelText("Email"), "user@example.com");
  await user.click(screen.getByRole("button", { name: /save/i }));

  expect(onSubmit).toHaveBeenCalledWith({ email: "user@example.com" });
});
  • Sempre await chamadas de userEvent
  • Chame userEvent.setup() uma vez por teste, reutilize o user retornado
  • userEvent simula uma sequência de navegador real; fireEvent dispara um único evento sintético — prefira userEvent

Padrões Assíncronos

// Element that appears after async work
expect(await screen.findByText("Loaded")).toBeInTheDocument();

// Side effect assertion
await waitFor(() => expect(saveSpy).toHaveBeenCalled());

// Element that should disappear
await waitForElementToBeRemoved(() => screen.queryByText("Loading"));

Nunca setTimeout + asserção — instável. Use os matchers acima.

Mock de Rede com MSW

Mock Service Worker simula em nível de rede. O componente, hooks e a biblioteca fetch se comportam exatamente como em produção.

Configuração

// test/setup.ts
import { setupServer } from "msw/node";
import { http, HttpResponse } from "msw";

export const handlers = [
  http.get("/api/users/:id", ({ params }) =>
    HttpResponse.json({ id: params.id, name: "Alice" }),
  ),
  http.post("/api/users", async ({ request }) => {
    const body = await request.json();
    return HttpResponse.json({ id: "new-id", ...body }, { status: 201 });
  }),
];

export const server = setupServer(...handlers);

beforeAll(() => server.listen({ onUnhandledRequest: "error" }));
afterEach(() => server.resetHandlers());
afterAll(() => server.close());

Configure onUnhandledRequest: "error" para que qualquer requisição não simulada falhe o teste de forma explícita — passes silenciosos são piores que falhas.

Sobrescrita por teste

test("renderiza erro em 500", async () => {
  server.use(
    http.get("/api/users/:id", () => new HttpResponse(null, { status: 500 })),
  );
  render(<UserPage id="1" />);

…
Perguntas frequentes

O que são testes de componente?

São verificações automáticas que simulam o uso de uma parte pequena do seu software (um componente) para ver se ela se comporta corretamente.

Por que testar o que o usuário vê e faz?

Testar a experiência do usuário garante que o software seja útil e fácil de usar, em vez de focar em detalhes internos que podem mudar.

O que é 'mockar' uma requisição de rede?

É simular uma resposta de uma chamada de internet. Isso permite testar como seu componente reage a diferentes respostas (sucesso, erro) sem precisar de uma conexão real.

Detalhes

Descrição original do autor

React component testing with React Testing Library, Vitest/Jest, MSW for network mocking, accessibility assertions with axe, and the decision boundary between component tests and Playwright/Cypress end-to-end runs. Use when writing or fixing tests for React components, hooks, or pages.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#114
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas