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

354
Views
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 answers
Answer question

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 Report
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!