Pular para o conteúdo

Testes e asserções

fp.test(name, fn) registra um test síncrono. Erros lançados dentro de fn — incluindo falhas de asserção — são capturados e registrados como um resultado de test com falha. Tests que passam registram { name, passed: true }; falhas registram { name, passed: false, error }.

A aba Tests do visualizador de respostas mostra cada resultado de test da requisição. Os resultados podem ser exportados como JSON ou JUnit XML pela UI — o formato JUnit é voltado para ferramentas de CI como Jenkins, GitLab ou Azure DevOps.

fp.expect(value) é um builder fluente no estilo Chai. Os terminais mais úteis:

  • Igualdade: equal / eql (identidade e profunda), closeTo(expected, delta).
  • Existência: exist, ok, true, false, null, undefined, empty.
  • Tipos: a('string'), instanceOf(Error).
  • Contenção: include(value), include.keys('a', 'b'), keys('a', 'b').
  • Numéricos: above(n), below(n), least(n), most(n), lengthOf(n).
  • Predicados: match(regex), satisfy(fn), oneOf([...]), throw(matcher?).
  • Strings: startWith(prefix), endWith(suffix).
  • Propriedades: property('name', value?), com .nested para paths com pontos.
  • Modificadores: not nega, deep torna profundo o equal seguinte, nested habilita paths com pontos.
fp.test('user has expected fields', () => {
const body = fp.response.json();
fp.expect(body).to.have.keys('id', 'email');
fp.expect(body.email).to.match(/@example\.com$/);
});

Tudo que é passado para fp.log/warn/error é clonado em profundidade para uma representação segura antes de aparecer na UI: funções viram um placeholder mencionando seu nome, referências circulares são detectadas e rotuladas, e a recursão para na profundidade 3. Um fp.log(someComplexObject) nunca vaza referências vivas para a UI nem trava o app com um grafo circular.