Testes em TypeScript: Guia Completo sobre Frameworks e Ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Testes em TypeScript: Frameworks e ferramentas para desenvolvimento de qualidade



TypeScript é uma linguagem poderosa que adiciona tipagem estática ao JavaScript. No entanto, mesmo tipos rigorosos não garantem a ausência de erros lógicos. Para garantir a confiabilidade do código, é necessário usar testes. Neste artigo, vamos explorar as principais ferramentas e frameworks para testar aplicações TypeScript: desde testes unitários até testes de ponta a ponta (E2E).



Por que testar código TypeScript?

O compilador TypeScript detecta erros de tipo, mas não verifica a lógica de negócios. Os testes ajudam a:

  • Detectar regressão durante refatorações
  • Documentar o comportamento esperado das funções
  • Acelerar revisões de código através de verificação automática
  • Aumentar a confiança no funcionamento da aplicação


Categorias principais de testes

  • Testes unitários — verificação de funções, classes ou módulos individuais.
  • Testes de integração — interação entre módulos (por exemplo, com banco de dados).
  • Testes E2E — simulação de ações do usuário no navegador.


1. Jest — framework universal para testes unitários

Jest, do Facebook, é a escolha mais popular para TypeScript. Ele funciona "pronto para uso": não requer configuração complexa, possui um mecanismo de mock integrado e relatório de cobertura de código.



Instalação:

npm install --save-dev jest @types/jest ts-jest

Adicione em jest.config.ts:

export default {  preset: 'ts-jest',  testEnvironment: 'node',};


Exemplo de teste unitário para uma função:

// math.tsexport const add = (a: number, b: number): number => a + b;

// math.test.tsimport { add } from './math';

describe('add', () => { it('should return sum of two numbers', () => { expect(add(2, 3)).toBe(5); });

it('should handle negative numbers', () => { expect(add(-1, -2)).toBe(-3); });});


Mocks em Jest:

// api.tsexport const fetchData = async (id: string) => {  const response = await fetch(`/api/${id}`);  return response.json();};

// api.test.tsjest.mock('./api', () => ({ fetchData: jest.fn().mockResolvedValue({ id: '1', name: 'Test' }),}));

import { fetchData } from './api';

test('should return mocked data', async () => { const data = await fetchData('1'); expect(data.name).toBe('Test');});


2. Mocha + Chai — alternativa flexível

Mocha é um executor de testes que oferece controle total sobre o processo. Chai adiciona asserções expressivas.



Instalação:

npm install --save-dev mocha chai @types/mocha @types/chai ts-node


Exemplo de teste de integração com assincronia:

// database.tsexport class Database {  async getUser(id: number): Promise<{ id: number; name: string }> {    // simulação de consulta    return { id, name: 'Alice' };  }}

// database.test.tsimport { expect } from 'chai';import { Database } from './database';

describe('Database', () => { it('should return user by id', async () => { const db = new Database(); const user = await db.getUser(1); expect(user).to.have.property('name', 'Alice'); });});


Para executar, use o comando mocha --require ts-node/register src/**/*.test.ts.



3. Cypress — Testes E2E para aplicações web

Cypress é ideal para testar frontend em TypeScript. Ele funciona em um navegador real e possui uma interface GUI conveniente.



Instalação:

npm install --save-dev cypress @cypress/types


Exemplo de teste E2E para uma página de login

Recommendations