Tengo un objeto como este:
> const expect = require('chai').expect > r = { loadedElementData: { userIdRecord: { name: 'Chiara', surname: 'Fabbietti', id: 1 } }, resolvedIdParamsValues: { users: 1 }, resolvedListFilter: {}, totalLoads: 1 } Puedo verificar si un objeto con contenido específico está en algún lugar profundo en r ; esto no arroja:
> expect(r).to.have.nested.deep.property('loadedElementData.userIdRecord', { name: "Chiara", surname: "Fabbietti", id: 1 })Sin embargo, quiero comprobar si hay objetos parciales . Por lo tanto, me gustaría que pasara algo como esto aunque el objeto de comparación sea una coincidencia parcial:
> expect(r).to.have.nested.deep.property('loadedElementData.userIdRecord', { id: 1, name: 'Chiara' })Obviamente, esto no funcionará, ya que verificará la igualdad profunda del objeto.
Esto en teoría debería funcionar:
expect(r).to.nested.include({'loadedElementData.userIdRecord': { id: 1, name: 'Chiara' } })Pero no. Esto REALMENTE debería funcionar:
expect(r).to.deep.nested.include({ 'loadedElementData.userIdRecord': { id: 1, name: 'Chiara' } })Pero no.
Puedo hacer que funcione comprobando UNA propiedad (solo 'id'):
expect(r).to.nested.include({ 'loadedElementData.userIdRecord.id': 1}) Pero estoy limitado a verificar la id y no puedo verificar el name también al mismo tiempo.
Puedo hacer esto en 2 pasos:
> expect(r).to.include.nested.property('loadedElementData.userIdRecord') > expect(r.loadedElementData.userIdRecord).to.include({ id: 1 })Pero este es un proceso de dos pasos, ¿puedo hacerlo en un solo paso?
Si verifica sus problemas de Github, los mantenedores reconocen que la inclusión anidada de un subconjunto de objetos no funciona desde 2020. Referencia: chai Github
Esta es la línea donde Chai decide si hace una igualdad profunda o estricta al comparar dos objetos: https://github.com/chaijs/chai/blob/a8359d3d15779a23a7957a4c52539d48de2763e0/lib/chai/core/assertions.js#L1892 .
_.eql es una referencia a la implementación de la biblioteca propia de igualdad profunda de Chai.
En la librería deep-eql el flujo llegará a esta función que hace comparaciones de igualdad sueltas pero no parciales.