Estoy tratando de probar si mis URLSearchParams son correctos con la opción to.deep.equal de chai, pero devuelve true (es igual) cuando no debería.
Vea el código en ejecución en https://stackblitz.com/edit/node-qx7qra?file=index.test.js
Supongamos que estamos probando esta función:
function getIncorrectParams() { return new URLSearchParams({ from: '2020', to: '2021', ids: ['abc-1'], }); }Si escribo:
test('via string', () => { expect(getIncorrectParams().toString()).not.to.equal( new URLSearchParams({ from: '2020', to: '2021', ids: ['abc-1', 'abc-2'], }).toString() ); }); Chai nota correctamente que las cuerdas no son las mismas, bien. Pero tan pronto como toString y pruebo con:
test('via deep equal', () => { expect(getIncorrectParams()).not.to.deep.equal( new URLSearchParams({ from: '2020', to: '2021', ids: ['abc-1', 'abc-2'], }) ); });Afirma que la afirmación falló porque los dos objetos son "iguales". Tenga en cuenta que si continúa y ejecuta el ejemplo, ¡el resultado de la depuración muestra claramente que hay diferencias!
Y la propiedad deep.equal funciona si uso un objeto "normal". Vea este ejemplo donde primero convierto URLSearchParams en un "objeto simple":
test('deep equal plain objects', () => { expect(Object.fromEntries(getIncorrectParams().entries())).not.to.deep.equal({ from: '2020', to: '2021', ids: ['abc-1', 'abc-2'], }); });