Ir al contenido

Tests y aserciones

fp.test(name, fn) registra un test síncrono. Los errores lanzados dentro de fn — incluidas las fallas de aserción — se capturan y se registran como un resultado de test fallido. Los tests que pasan registran { name, passed: true }; las fallas registran { name, passed: false, error }.

La pestaña Tests del visor de respuestas muestra cada resultado de test de la solicitud. Los resultados se pueden exportar como JSON o JUnit XML desde la UI — el formato JUnit está pensado para herramientas de CI como Jenkins, GitLab o Azure DevOps.

fp.expect(value) es un builder fluido estilo Chai. Los terminales más útiles:

  • Igualdad: equal / eql (identidad y profunda), closeTo(expected, delta).
  • Existencia: exist, ok, true, false, null, undefined, empty.
  • Tipos: a('string'), instanceOf(Error).
  • Contención: 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).
  • Propiedades: property('name', value?), con .nested para paths con puntos.
  • Modificadores: not niega, deep hace profundo el siguiente equal, nested habilita paths con puntos.
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$/);
});

Todo lo que se pasa a fp.log/warn/error se clona en profundidad a una representación segura antes de mostrarse en la UI: las funciones se vuelven un placeholder que menciona su nombre, las referencias circulares se detectan y etiquetan, y la recursión se detiene en profundidad 3. Un fp.log(someComplexObject) nunca filtra referencias vivas a la UI ni congela la app con un grafo circular.