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

359
Vistas
No puedo entender la diferencia entre las versiones del nodo, lo que resulta en la diferencia entre afirmaciones

Cuando ejecuto las siguientes declaraciones usando diferentes versiones de nodos, veo una diferencia en el resultado de la afirmación. Estoy usando v10.15.1 donde pasa la aserción. Pero el mismo código en v14.18.1 arroja un error.

 const assert = require('assert') var err = new Error('some error'); var d = [{ 'error':[err] }] var expected = [{ 'error':[{}] }] assert.deepEqual(d,expected)

El error es el siguiente:

 assert.js:118 throw new AssertionError(obj); ^ AssertionError [ERR_ASSERTION]: Expected values to be loosely deep-equal: [ { error: [ Error: some error at Object.<anonymous> (/Users/username/Desktop/repos/temp_files/test.js:2:11) at Module._compile (internal/modules/cjs/loader.js:1085:14) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) at Module.load (internal/modules/cjs/loader.js:950:32) at Function.Module._load (internal/modules/cjs/loader.js:790:12) at Function.executeUserEntryPoint [as r... should loosely deep-equal [ { error: [ [] ] } ] at Object.<anonymous> (/Users/username/Desktop/repos/temp_files/test.js:9:8) at Module._compile (internal/modules/cjs/loader.js:1085:14) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) at Module.load (internal/modules/cjs/loader.js:950:32) at Function.Module._load (internal/modules/cjs/loader.js:790:12) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) at internal/main/run_main_module.js:17:47 { generatedMessage: true, code: 'ERR_ASSERTION', actual: [ { error: [ Error: some error at Object.<anonymous> (/Users/username/Desktop/repos/temp_files/test.js:2:11) at Module._compile (internal/modules/cjs/loader.js:1085:14) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) at Module.load (internal/modules/cjs/loader.js:950:32) at Function.Module._load (internal/modules/cjs/loader.js:790:12) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) at internal/main/run_main_module.js:17:47 ] } ], expected: [ { error: [ [] ] } ], operator: 'deepEqual' }

Me referí a la documentación para ambas versiones pero no la encontré útil.

v10

v14

Entiendo, por supuesto, que el objeto de error está vacío en uno pero no en el otro. Pero no puedo encontrar la razón por la que v10 lo ignora y lo que cambió más tarde por lo que ahora se detecta el error

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El comportamiento de assert.deepEqual se cambió en Node.js 12 con esta solicitud de extracción. Parte de la motivación detrás del cambio fue el requisito de alinear la comparación igual laxa con la comparación igual estricta cuyo comportamiento había sido más predecible desde el principio. En consecuencia, la afirmación

 assert.deepEqual(new Error('test'), { });

pasa en Node.js < 12 pero falla en Node.js 12 y posteriores.

La explicación simple es que los Error s son objetos sin propiedades enumerables propias. En la versión anterior de Node.js, el hecho de que un Error y un literal de objeto vacío ( { } ) sean ambos objetos sin propiedades enumerables propias fue razón suficiente para que ambos se compararan vagamente iguales. El comportamiento cambió en Node.js 12 donde la documentación de deepEqual dice:

Los nombres y mensajes de Error siempre se comparan, incluso si no son propiedades enumerables.

De acuerdo, esto no hace que el cambio que observaste sea obvio de ninguna manera.

about 4 years ago · Juan Pablo Isaza Denunciar
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