Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

72
Vistas
Mostrar los datos erróneos cuando falla una aserción

A menudo, cuando falla una afirmación, quiero ver qué tipo de datos causaron el problema. Eso es muy fácil con las herramientas de desarrollo del navegador, ya que puedo ver los valores en la pila. Pero es más difícil para node.js.

¿Hay alguna forma sencilla de mostrar el seguimiento de la pila, así como los valores defectuosos cuando falla una afirmación, en un script node.js de corta duración?

Este es un problema al que se enfrentan casi todos los desarrolladores de nodos, ¿verdad? Me sorprende que no haya una solución obvia entonces.

Como manejas esto?

Ejemplo

Aquí hay un ejemplo mínimo para mostrar el problema:

 import {strict as assert} from 'assert'; function sameX(a, b){ return ax==bx; } const a={x:1}; a.self=a; const b={x:2}; b.self=b;

Digamos que espero que sameX(a,b) devuelva verdadero. Si no es así, deseo imprimir un mensaje de error, mostrar el seguimiento de la pila y mostrar el valor actual de esas variables.

¿Cómo puedo hacerlo bien en el nodo?

assert Intento fallido: argumentos adicionales para la afirmación del nodo
 assert(sameX(a,b), "Objects with unexpected x", a, b);

Esto, por supuesto, solo imprime:

Objetos con x inesperado

ya que la afirmación del nodo solo toma dos parámetros .

❌ Intento fallido: encadenar los objetos
 assert(sameX(a,b), `Objects with unexpected x ${a} ${b}`);

Esto imprime:

Objetos con x inesperado [objeto Objeto] [objeto Objeto]

b a

❌ Intento fallido: JSON.stringificar los objetos

Algo similar a:

 assert(sameX(a,b), `Objects with unexpected x ${JSON.stringify(a)} ${JSON.stringify(b)}`);

No solo es complicado escribirlo, sino que puede fallar en algunos casos (como en este ejemplo donde a y b tienen referencias circulares).

❌ Intento fallido: console.assert
 console.assert(sameX(a,b), "Objects with unexpected x", a, b);

Esto imprime un mensaje de error que me gusta:

Objetos con x inesperado <ref *1> { x: 1, self: [Circular *1] } <ref *1> { x: 2, self: [Circular *1] }

Sin embargo, no arroja una excepción y, por lo tanto, ni siquiera muestra el seguimiento de la pila. Quiero ver el seguimiento de la pila.

⚠️ Solución incómoda: conectarse a las herramientas de desarrollo del navegador

Es posible depurar Node utilizando las herramientas de desarrollo de un navegador .

Esto funciona, pero no es una buena opción para una secuencia de comandos de corta duración o de un solo disparo que finaliza en milisegundos.

Ahora, si hubiera algo como una terminal que incrustara las herramientas de desarrollo y las conectara a la instancia de Node cuando una está en ejecución, sería perfecto. Pero no conozco ninguna terminal de este tipo.

⚠️ Solución incómoda: función de afirmación personalizada

Por supuesto que puedo definir mi propia función de afirmación:

 function assert(cond, ...msg){ if(!cond){ console.error("Assertion Failed!", ...msg); throw new Error(msg[0]); } }

Pero tendría que copiarlo y pegarlo en cada proyecto mío y carecería de todas las características de la afirmación del nodo (por ejemplo, necesitaría implementar assert.deepEqual por separado, si lo necesito).

Una mejor alternativa podría ser usar una biblioteca existente. ¿Qué biblioteca debo usar para esto? Después de buscar un poco, no pude encontrar ninguna biblioteca generalizada para este caso de uso. La mayoría de las bibliotecas de aserciones están destinadas a conjuntos de pruebas y son demasiado pesadas para la producción.

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda