Pular para o conteúdo
Skillpedia
Testes41 mil · #4879

javascript-testing-patterns

Ajuda seu agente a criar testes completos para código JavaScript. Ele usa ferramentas como Jest e Vitest para garantir a qualidade e o bom funcionamento.

O que ela faz

Este guia ensina como testar seu código JavaScript/TypeScript de forma completa. Ele mostra como configurar ferramentas para testar pequenas partes (unit tests), como elas funcionam juntas (integration tests) e como o usuário final interage (end-to-end tests), usando técnicas como simular dados (mocking) e desenvolver seguindo os testes (TDD).

Quando usar

  • ✓Ao iniciar um novo projeto e precisar configurar os testes.
  • ✓Ao escrever testes para funções ou classes específicas.
  • ✓Ao querer garantir que diferentes partes do seu código funcionam bem juntas.

Exemplo do que pedir para a IA

“Como configuro o Jest para testar meu projeto?”

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/wshobson/agents/blob/main/plugins/javascript-typescript/skills/javascript-testing-patterns/SKILL.md

Mensagem pronta para colar

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

Ele explica como usar ferramentas populares como Jest e Vitest. Você escreve testes que verificam se cada parte do seu código funciona como esperado, simulando dependências externas quando necessário.

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 wshobson/agents --skill javascript-testing-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/javascript-typescript/skills/javascript-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 de Teste em JavaScript

Guia completo para implementar estratégias de teste robustas em aplicações JavaScript/TypeScript usando frameworks de teste modernos e melhores práticas.

Quando Usar Esta Habilidade

  • Configurar infraestrutura de testes para novos projetos
  • Escrever testes unitários para funções e classes
  • Criar testes de integração para APIs e serviços
  • Implementar testes end-to-end para fluxos de usuário
  • Simular dependências e APIs externas (mocking)
  • Testar componentes React, Vue ou outros de frontend
  • Implementar desenvolvimento guiado por testes (TDD)
  • Configurar testes contínuos em pipelines de CI/CD

Frameworks de Teste

Jest - Framework de Teste Completo

Configuração:

// jest.config.ts
import type { Config } from "jest";

const config: Config = {
  preset: "ts-jest",
  testEnvironment: "node",
  roots: ["<rootDir>/src"],
  testMatch: ["**/__tests__/**/*.ts", "**/?(*.)+(spec|test).ts"],
  collectCoverageFrom: [
    "src/**/*.ts",
    "!src/**/*.d.ts",
    "!src/**/*.interface.ts",
  ],
  coverageThreshold: {
    global: {
      branches: 80,
      functions: 80,
      lines: 80,
      statements: 80,
    },
  },
  setupFilesAfterEnv: ["<rootDir>/src/test/setup.ts"],
};

export default config;

Vitest - Teste Rápido e Nativo do Vite

Configuração:

// vitest.config.ts
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    globals: true,
    environment: "node",
    coverage: {
      provider: "v8",
      reporter: ["text", "json", "html"],
      exclude: ["**/*.d.ts", "**/*.config.ts", "**/dist/**"],
    },
    setupFiles: ["./src/test/setup.ts"],
  },
});

Padrões de Teste Unitário

Padrão 1: Testando Funções Puras

// utils/calculator.ts
export function add(a: number, b: number): number {
  return a + b;
}

export function divide(a: number, b: number): number {
  if (b === 0) {
    throw new Error("Division by zero");
  }
  return a / b;
}

// utils/calculator.test.ts
import { describe, it, expect } from "vitest";
import { add, divide } from "./calculator";

describe("Calculator", () => {
  describe("add", () => {
    it("should add two positive numbers", () => {
      expect(add(2, 3)).toBe(5);
    });

    it("should add negative numbers", () => {
      expect(add(-2, -3)).toBe(-5);
    });

    it("should handle zero", () => {
      expect(add(0, 5)).toBe(5);
      expect(add(5, 0)).toBe(5);
    });
  });

  describe("divide", () => {
    it("should divide two numbers", () => {
      expect(divide(10, 2)).toBe(5);
    });

    it("should handle decimal results", () => {
      expect(divide(5, 2)).toBe(2.5);
    });

    it("should throw error when dividing by zero", () => {
      expect(() => divide(10, 0)).toThrow("Division by zero");
    });
  });
});

Padrão 2: Testando Classes

// services/user.service.ts
export class UserService {
  private users: Map<string, User> = new Map();

  create(user: User): User {
    if (this.users.has(user.id)) {
      throw new Error("User already exists");
    }
    this.users.set(user.id, user);
    return user;
  }

  findById(id: string): User | undefined {
    return this.users.get(id);
  }

  update(id: string, updates: Partial<User>): User {
    const user = this.users.get(id);
    if (!user) {
      throw new Error("User not found");
    }
    const updated = { ...user, ...updates };
    this.users.set(id, updated);
    return updated;
  }

  delete(id: string): boolean {
    return this.users.delete(id);
  }
}

// services/user.service.test.ts
import { describe, it, expect, beforeEach } from "vitest";
import { UserService } from "./user.service";

describe("UserService", () => {
  let service: UserService;

  beforeEach(() => {
    service = new UserService();
  });

  describe("create", () => {
    it("should create a new user", () => {
      const user = { id: "1", name: "John", email: "john@example.com" };
      const created = service.create(user);

      expect(created).toEqual(user);
      expect(service.findById("1")).toEqual(user);
    });

    it("should throw error if user already exists", () => {
      const user = { id: "1", name: "John", email: "john@example.com" };
      service.create(user);

      expect(() => service.create(user)).toThrow("User already exists");
    });
  });

  describe("update", () => {
    it("should update existing user", () => {
      const user = { id: "1", name: "John", email: "john@example.com" };

…
Perguntas frequentes

O que são testes unitários?

São testes que verificam pequenas partes isoladas do seu código, como uma única função ou classe, para garantir que elas fazem o que deveriam.

O que é TDD (Test-Driven Development)?

É uma abordagem onde você escreve os testes antes de escrever o código. O teste falha inicialmente, e você escreve o código apenas o suficiente para fazer o teste passar.

O que é mocking?

Mocking é criar versões falsas (simuladas) de partes do seu código ou de serviços externos. Isso permite testar uma parte específica sem depender do comportamento real de outras partes.

Detalhes

Descrição original do autor

Implement comprehensive testing strategies using Jest, Vitest, and Testing Library for unit tests, integration tests, and end-to-end testing with mocking, fixtures, and test-driven development. Use when writing JavaScript/TypeScript tests, setting up test infrastructure, or implementing TDD/BDD workflows.

repo: wshobson/agents

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas