Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

78
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda