Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

203
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!