Jest · fixture · ViaCEP mock
Gerador de CEP em Jest
Fixture pra CEP brasileiro em testes Jest. globalSetup, mock ViaCEP API, teste E2E de frete.
npm install --save-dev fakeforge-brFixture com cache
// tests/fixtures/cep-fixture.ts
import { FakeForge } from "fakeforge-br"
const ff = new FakeForge()
let cache: string[] | null = null
export async function getCEPs(qty = 20): Promise<string[]> {
if (!cache || cache.length < qty) {
cache = await ff.cep(Math.max(qty, 100))
}
return cache.slice(0, qty)
}
// Retorna CEP + endereço completo
export async function getCEPComEndereco() {
const [e] = await ff.address(1)
return e
}Teste — validador CEP
// tests/cep-validator.test.ts
import { getCEPs } from "./fixtures/cep-fixture"
import { validarCEP } from "../src/validators"
describe("CEP validator", () => {
test.each(await getCEPs(10))("aceita %s", (cep) => {
expect(validarCEP(cep)).toBe(true)
})
test("rejeita CEPs inválidos", () => {
expect(validarCEP("00000-000")).toBe(false)
expect(validarCEP("")).toBe(false)
expect(validarCEP("abc")).toBe(false)
})
})Mock ViaCEP
// tests/viacep.test.ts
import { getCEPComEndereco } from "./fixtures/cep-fixture"
// Mock global do fetch pra ViaCEP
global.fetch = jest.fn().mockImplementation((url) => {
const match = url.match(/viacep\.com\.br\/ws\/(\d+)/)
const cep = match?.[1] || ""
return Promise.resolve({
ok: true,
json: () => Promise.resolve({
cep, logradouro: "Rua Mock", bairro: "Mock", localidade: "Cidade", uf: "SP",
}),
})
})
test("consulta ViaCEP com CEP do fakeforge", async () => {
const endereco = await getCEPComEndereco()
const res = await fetch(`https://viacep.com.br/ws/${endereco.cep.replace(/\D/g, '')}/json/`)
const data = await res.json()
expect(data.uf).toBe("SP")
})