Skip to content

Testes em TypeScript: Configurando Jest e Escrevendo Testes Básicos

Realizar testes automatizados é uma prática essencial para garantir a qualidade e a robustez de seu código. Jest é uma das bibliotecas de teste mais populares para JavaScript, e ela oferece suporte completo para TypeScript. A seguir, descreveremos como configurar Jest com TypeScript e escrever alguns testes básicos.

Configurando Jest com TypeScript

  1. Instalando Dependências:

    Para começar, você precisará instalar Jest, juntamente com alguns pacotes auxiliares para integrar com TypeScript. Execute o seguinte comando para instalar as dependências necessárias:

    bash
    npm install --save-dev jest @types/jest ts-jest
    • jest: O framework de teste principal.
    • @types/jest: Tipos TypeScript para Jest.
    • ts-jest: Um pré-processador para Jest que permite usar TypeScript.
  2. Configurando Jest:

    Crie ou edite o arquivo de configuração do Jest, geralmente chamado jest.config.js, na raiz do seu projeto:

    javascript
    module.exports = {
      preset: "ts-jest",
      testEnvironment: "node",
      moduleFileExtensions: ["ts", "tsx", "js"],
      transform: {
        "^.+\\.tsx?$": "ts-jest",
      },
      testMatch: ["**/tests/**/*.test.ts"],
      globals: {
        "ts-jest": {
          tsconfig: "tsconfig.json",
        },
      },
    };
    • preset: 'ts-jest': Usa o preset do ts-jest para transpilar TypeScript para JavaScript antes dos testes.
    • testEnvironment: 'node': Define o ambiente de teste (pode ser 'jsdom' para testes no navegador).
    • moduleFileExtensions: Especifica quais extensões de arquivos o Jest deve reconhecer.
    • transform: Define como os arquivos TypeScript devem ser transformados usando ts-jest.
    • testMatch: Define o padrão de correspondência para os arquivos de teste.
  3. Configurando o TypeScript:

    Certifique-se de que seu tsconfig.json está configurado para testes. Adicione ou edite o arquivo para incluir as opções necessárias:

    json
    {
      "compilerOptions": {
        "target": "ES6",
        "module": "commonjs",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true
      },
      "include": ["src", "tests"]
    }

Escrevendo Testes Básicos

Com a configuração completa, agora podemos escrever alguns testes básicos em TypeScript.

  1. Criando um Arquivo de Teste:

    Crie um diretório chamado tests na raiz do seu projeto. Dentro deste diretório, crie um arquivo chamado example.test.ts.

  2. Escrevendo o Teste:

    Aqui está um exemplo simples de um teste que verifica se uma função sum funciona corretamente:

    typescript
    // src/sum.ts
    export const sum = (a: number, b: number): number => {
      return a + b;
    };
    
    // tests/example.test.ts
    import { sum } from "../src/sum";
    
    test("adds 1 + 2 to equal 3", () => {
      expect(sum(1, 2)).toBe(3);
    });
    • src/sum.ts: Define a função sum que soma dois números.
    • tests/example.test.ts: Contém um teste que verifica se sum(1, 2) retorna 3.
  3. Executando os Testes:

    Para executar os testes, adicione um script de teste ao seu package.json:

    json
    "scripts": {
      "test": "jest"
    }

    Agora você pode executar seus testes com o comando:

    bash
    npm test

    Se tudo estiver configurado corretamente, você deverá ver uma saída indicando que os testes foram executados com sucesso.

Dicas para Testes em TypeScript

  • Cobertura de Código: Use a opção de cobertura de código do Jest para garantir que todas as partes críticas do seu código estão sendo testadas. Você pode habilitar isso com a flag --coverage.

    bash
    npm test -- --coverage
  • Testes Assíncronos: Jest suporta testes assíncronos, permitindo testar funções que retornam promessas ou usam async/await.

    typescript
    test("fetches data", async () => {
      const data = await fetchData();
      expect(data).toBeDefined();
    });
  • Mocking: Utilize mocks para simular dependências externas, como APIs ou serviços, garantindo que seus testes sejam isolados e previsíveis.

    typescript
    import axios from "axios";
    jest.mock("axios");
    
    test("fetches data from API", async () => {
      const mockedAxios = axios as jest.Mocked<typeof axios>;
      mockedAxios.get.mockResolvedValue({ data: "mocked data" });
    
      const data = await fetchDataFromAPI();
      expect(data).toEqual("mocked data");
    });

Com essas configurações e práticas, você estará pronto para escrever testes eficazes e manter a qualidade do seu código TypeScript ao longo do tempo.