Projetos
Testes

Validador de CPF com Jest: Mockando uma API e Testando na Prática

Testar código com Jest vai além de verificar se uma função retorna o valor esperado. Podemos simular APIs, validar dados reais e garantir que nosso código funciona mesmo com entradas externas. Neste post, vamos criar um exemplo prático: **uma API falsa que retorna CPFs** e uma função que valida se esse CPF é verdadeiro. Tudo isso com testes automatizados.

16 de mai. de 2025

7 min de leitura

Validador de CPF com Jest: Mockando uma API e Testando na Prática

O que vamos construir

Neste projeto, vamos desenvolver uma pequena aplicação que simula o comportamento de uma API real. Começamos criando uma função que retorna CPFs fictícios, como se viessem de um servidor. Em seguida, implementamos uma lógica robusta para verificar se esses CPFs são válidos ou não, com base no algoritmo oficial de validação usado em sistemas bancários e governamentais. Por fim, aplicaremos testes automatizados usando o Jest para garantir que tanto a simulação da API quanto a verificação de CPF estão funcionando corretamente.

Estrutura do Projeto

📁 Pastas e Arquivos

/mock-cpf-validator
├── src/
│   ├── api.js              # Mock da API que retorna CPFs
│   ├── cpfValidator.js     # Funções para validar CPF
├── tests/
│   ├── api.test.js
│   └── cpfValidator.test.js
├── package.json
└── jest.config.js

1. Criando o Mock da API

Vamos simular uma API que retorna um CPF. Isso ajuda a testar funcionalidades sem depender de uma API real.

// src/api.js

// Simula uma chamada de rede com uma pequena demora
export async function fetchCPF() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        cpf: '123.456.789-09', // Aqui você pode trocar por um CPF válido real
      });
    }, 100); // Simula 100ms de atraso, como se fosse uma requisição real
  });
}

2. Função para Validar CPF

Abaixo temos a função que verifica se o CPF é válido. Ela segue o mesmo padrão de cálculo utilizado por sistemas bancários e fiscais.

// src/cpfValidator.js

export function isValidCPF(cpf) {
  const onlyDigits = cpf.replace(/[^\d]/g, ''); // Remove pontos e traço

  // Verifica se o CPF tem 11 dígitos e se todos os dígitos são iguais
  if (onlyDigits.length !== 11 || /^(\d)\1+$/.test(onlyDigits)) return false;

  // Função auxiliar para calcular os dígitos verificadores
  const calcCheckDigit = (cpfArray, factor) => {
    const total = cpfArray
      .slice(0, factor - 1)
      .reduce((acc, num, idx) => acc + num * (factor - idx), 0);
    const result = (total * 10) % 11;
    return result === 10 ? 0 : result;
  };

  const cpfArray = onlyDigits.split('').map(Number); // Converte cada dígito em número
  const digit1 = calcCheckDigit(cpfArray, 10);
  const digit2 = calcCheckDigit(cpfArray, 11);

  return digit1 === cpfArray[9] && digit2 === cpfArray[10]; // Verifica se os dígitos batem
}

3. Escrevendo os Testes com Jest

Testando a função de validação

Vamos testar alguns casos comuns para garantir que a função se comporta corretamente.

// tests/cpfValidator.test.js

import { isValidCPF } from '../src/cpfValidator';

test('valid CPF', () => {
  expect(isValidCPF('529.982.247-25')).toBe(true); // CPF real válido
});

test('invalid CPF with same digits', () => {
  expect(isValidCPF('111.111.111-11')).toBe(false); // Caso clássico de CPF falso
});

test('invalid CPF with wrong digits', () => {
  expect(isValidCPF('123.456.789-00')).toBe(false); // CPF com dígitos verificadores errados
});

Mockando a API

Aqui vamos simular a resposta da API usando jest.mock() — muito útil quando não queremos depender de chamadas externas durante os testes.

// tests/api.test.js

import * as api from '../src/api';

// Substitui a função fetchCPF por um mock
jest.mock('../src/api', () => ({
  fetchCPF: jest.fn(),
}));

test('mock fetchCPF returns expected CPF', async () => {
  api.fetchCPF.mockResolvedValue({ cpf: '529.982.247-25' });

  const response = await api.fetchCPF();
  expect(response.cpf).toBe('529.982.247-25');
});

Erro comum: esquecer de usar async/await ao testar funções assíncronas pode fazer seu teste falhar sem motivo aparente.

Conclusão

Com esse pequeno projeto, conseguimos ver o Jest sendo aplicado de forma completa em uma situação próxima da vida real. Criamos uma simulação de API que retorna um CPF e, com isso, aprendemos como mockar esse tipo de chamada. Também implementamos uma função de verificação de CPF, mostrando como aplicar lógica condicional e matemática em validações. Por fim, testamos tudo isso com Jest, garantindo que nossas funções se comportam como esperado mesmo com diferentes tipos de entrada.

Esse tipo de prática ajuda muito quem está aprendendo testes, pois une teoria e prática de forma equilibrada.

Dica Extra

Você pode evoluir esse projeto:

  • Gerar CPFs aleatórios válidos com uma função adicional
  • Criar uma API real com Express para fornecer os CPFs
  • Criar uma interface simples com React ou HTML para digitar e validar CPFs

Tags

Projetos
Testes

Artigos Relacionados

Imagem sobre o React
Projetos
Testes

Projeto ToDoList com Jest

Neste artigo, vamos criar e testar uma ToDoList simples utilizando o framework Jest. O foco será construir funções robustas com feedback claro e realizar testes automatizados para garantir que tudo funcione como esperado.

16 de mai. de 20254 min de leitura
Imagem sobre o React
Projetos
Testes

Criando uma API Mockada de Usuários com Testes em Jest

Neste post, vamos criar uma API mockada de usuários usando apenas JavaScript puro, sem frameworks como Express, e testar seus endpoints com Jest. Essa prática ajuda a entender como simular comportamentos de APIs e validar as respostas esperadas.

16 de mai. de 20257 min de leitura

Blog DevTest

Conteúdo técnico Sobre React, Jest e testes modernos para desenvolvedores de todos os níveis

© 2025

DevTrail. Todos os direitos reservados.