
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

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
Artigos Relacionados


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.