Jest · fixture · Correios
Gerador de Endereço em Jest
Fixture pra endereço brasileiro em testes Jest. Session fixture, globalSetup, mock de Correios pra teste de frete E2E.
npm install --save-dev fakeforge-br
// tests/fixtures/endereco.ts
import { FakeForge } from "fakeforge-br"
export const ff = new FakeForge()Fixture com filtro por UF
// tests/fixtures/endereco-fixture.ts
import { FakeForge, Address } from "fakeforge-br"
const ff = new FakeForge()
let cache: Address[] | null = null
async function ensureCache() {
if (!cache || cache.length < 100) {
cache = await ff.address(200)
}
return cache
}
export async function getEnderecos(qty = 20): Promise<Address[]> {
const c = await ensureCache()
return c.slice(0, qty)
}
export async function getEnderecoPorUF(uf: string): Promise<Address> {
const c = await ensureCache()
const found = c.find(e => e.estado === uf)
if (found) return found
// Se cache não tem, chama API 5x pra achar
for (let i = 0; i < 5; i++) {
const [e] = await ff.address(20)
if (e.estado === uf) return e
}
throw new Error(`Nenhum endereço ${uf}`)
}Teste — frete por CEP
// tests/frete.test.ts
import { getEnderecos, getEnderecoPorUF } from "./fixtures/endereco-fixture"
import { CalculadoraFrete } from "../src/frete"
describe("CalculadoraFrete", () => {
test("calcula frete pra endereço SP", async () => {
const e = await getEnderecoPorUF("SP")
const valor = await CalculadoraFrete.calcular({ cep: e.cep, peso_kg: 2 })
expect(valor).toBeGreaterThan(0)
expect(valor).toBeLessThan(50) // SP tem frete barato
})
test("calcula frete pra endereço AM (mais caro)", async () => {
const e = await getEnderecoPorUF("AM")
const valor = await CalculadoraFrete.calcular({ cep: e.cep, peso_kg: 2 })
expect(valor).toBeGreaterThan(30) // Amazonas tem frete mais caro
})
})Mock de Correios API
// tests/correios-mock.test.ts
import { getEnderecos } from "./fixtures/endereco-fixture"
jest.mock("../src/correios.client", () => ({
CorreiosClient: jest.fn(() => ({
consultarCep: jest.fn().mockImplementation((cep) => Promise.resolve({
cep,
logradouro: "Rua Mock",
cidade: "Cidade Mock",
uf: "SP",
})),
})),
}))
test("service consulta Correios API", async () => {
const { EnderecoService } = await import("../src/endereco.service")
const [e] = await getEnderecos(1)
const service = new EnderecoService()
const result = await service.consultar(e.cep)
expect(result.cep).toBe(e.cep)
})