Pular para o conteúdo
Skillpedia
Testes48 mil · #4359

testing-patterns

Faz seu agente usar técnicas avançadas para escrever testes de código. Ajuda a criar dados de teste e a seguir um processo para encontrar e corrigir erros.

O que ela faz

Esta skill ensina como escrever testes para seu código, garantindo que ele funcione como esperado. Ela mostra como criar dados de exemplo (fábricas), como simular partes do seu código (mocks) e como seguir um processo para escrever testes.

Quando usar

  • ✓Ao escrever testes para verificar se seu código está correto.
  • ✓Ao criar dados de exemplo para usar nos testes.
  • ✓Ao seguir o ciclo de TDD (escrever teste primeiro, depois o código).

Exemplo do que pedir para a IA

“Como posso criar um teste para verificar se um botão de login funciona?”

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/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/testing-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/testing-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A skill usa padrões como TDD e BDD para guiar a escrita de testes. Ela também fornece exemplos de como criar funções de fábrica para gerar dados de teste e como usar mocks para isolar partes do código.

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 sickn33/agentic-awesome-skills --skill testing-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/testing-patterns/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.

Padrões e Utilitários de Teste

Filosofia de Teste

Desenvolvimento Orientado a Testes (TDD):

  • Escreva o teste que falha PRIMEIRO
  • Implemente o código mínimo para passar
  • Refatore após o "verde" (tudo passando)
  • Nunca escreva código de produção sem um teste que falha

Testes Orientados a Comportamento (Behavior-Driven Testing):

  • Teste o comportamento, não a implementação
  • Foque em APIs públicas e requisitos de negócio
  • Evite testar detalhes de implementação
  • Use nomes de testes descritivos que expliquem o comportamento

Padrão Factory (Fábrica):

  • Crie funções getMockX(overrides?: Partial<X>)
  • Forneça valores padrão sensatos
  • Permita sobrescrever propriedades específicas
  • Mantenha os testes DRY (Don't Repeat Yourself - Não se Repita) e fáceis de manter

Utilitários de Teste

Função de Renderização Personalizada

Crie uma função de renderização personalizada que envolva componentes com provedores necessários:

// src/utils/testUtils.tsx
import { render } from '@testing-library/react-native';
import { ThemeProvider } from './theme';

export const renderWithTheme = (ui: React.ReactElement) => {
  return render(
    <ThemeProvider>{ui}</ThemeProvider>
  );
};

Uso:

import { renderWithTheme } from 'utils/testUtils';
import { screen } from '@testing-library/react-native';

it('should render component', () => {
  renderWithTheme(<MyComponent />);
  expect(screen.getByText('Hello')).toBeTruthy();
});

Padrão Factory (Fábrica)

Fábrica de Props de Componente

import { ComponentProps } from 'react';

const getMockMyComponentProps = (
  overrides?: Partial<ComponentProps<typeof MyComponent>>
) => {
  return {
    title: 'Default Title',
    count: 0,
    onPress: jest.fn(),
    isLoading: false,
    ...overrides,
  };
};

// Usage in tests
it('should render with custom title', () => {
  const props = getMockMyComponentProps({ title: 'Custom Title' });
  renderWithTheme(<MyComponent {...props} />);
  expect(screen.getByText('Custom Title')).toBeTruthy();
});

Fábrica de Dados

interface User {
  id: string;
  name: string;
  email: string;
  role: 'admin' | 'user';
}

const getMockUser = (overrides?: Partial<User>): User => {
  return {
    id: '123',
    name: 'John Doe',
    email: 'john@example.com',
    role: 'user',
    ...overrides,
  };
};

// Usage
it('should display admin badge for admin users', () => {
  const user = getMockUser({ role: 'admin' });
  renderWithTheme(<UserCard user={user} />);
  expect(screen.getByText('Admin')).toBeTruthy();
});

Padrões de Mocking

Mocking de Módulos

// Mock entire module
jest.mock('utils/analytics');

// Mock with factory function
jest.mock('utils/analytics', () => ({
  Analytics: {
    logEvent: jest.fn(),
  },
}));

// Access mock in test
const mockLogEvent = jest.requireMock('utils/analytics').Analytics.logEvent;

Mocking de Hooks GraphQL

jest.mock('./GetItems.generated', () => ({
  useGetItemsQuery: jest.fn(),
}));

const mockUseGetItemsQuery = jest.requireMock(
  './GetItems.generated'
).useGetItemsQuery as jest.Mock;

// In test
mockUseGetItemsQuery.mockReturnValue({
  data: { items: [] },
  loading: false,
  error: undefined,
});

Estrutura de Teste

describe('ComponentName', () => {
  beforeEach(() => {
    jest.clearAllMocks();
  });

  describe('Rendering', () => {
    it.todo('should render component with default props');
    it.todo('should render loading state when loading');
  });

  describe('User interactions', () => {
    it.todo('should call onPress when button is clicked');
  });

  describe('Edge cases', () => {
    it.todo('should handle empty data gracefully');
  });
});

Padrões de Query

// Element must exist
expect(screen.getByText('Hello')).toBeTruthy();

// Element should not exist
expect(screen.queryByText('Goodbye')).toBeNull();

// Element appears asynchronously
// async-appearance-example: await the element, not the Promise
expect(await screen.findByText('Loaded')).toBeTruthy();

Padrões de Interação do Usuário

import { fireEvent, screen, waitFor } from '@testing-library/react-native';

it('should submit form on button click', async () => {
  const onSubmit = jest.fn();
  renderWithTheme(<LoginForm onSubmit={onSubmit} />);

  fireEvent.changeText(screen.getByLabelText('Email'), 'user@example.com');
  fireEvent.changeText(screen.getByLabelText('Password'), 'password123');
  fireEvent.press(screen.getByTestId('login-button'));

  await waitFor(() => {
    expect(onSubmit).toHaveBeenCalled();
  });
});

Anti-Padrões a Evitar

Testar Comportamento de Mock em Vez de Comportamento Real

…

Perguntas frequentes

O que é TDD?

TDD significa Test-Driven Development (Desenvolvimento Guiado por Testes). É uma prática onde você escreve um teste que falha primeiro, depois escreve o código mínimo necessário para fazer o teste passar, e por fim refatora o código.

O que são 'fábricas' (factories) em testes?

Fábricas são funções que criam dados de exemplo (como objetos de usuário ou configurações de componentes) de forma consistente e reutilizável para seus testes.

O que são 'mocks'?

Mocks são versões simuladas de partes do seu código (como chamadas de rede ou funções externas) que você usa em testes para controlar o ambiente e focar no que está sendo testado.

Detalhes

Descrição original do autor

Jest testing patterns, factory functions, mocking strategies, and TDD workflow. Use when writing unit tests, creating test factories, or following TDD red-green-refactor cycle.

repo: sickn33/agentic-awesome-skills

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas