es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo imprimir una bonita diferencia de objetos en un matcher personalizado de Jest?

Estoy escribiendo un comparador personalizado de Jest para comparar objetos de alguna manera arbitraria:

expect.extend({
  toTorgle(recibido, esperado) {
    ...
    return {
      pass: false,
      message: () => "expect(recibido).toTorgle(esperado): " + ???
    }
  }
})

¿Cómo puedo imprimir una diferencia de objetos bonita entre los dos objetos, como la que obtengo con el comparador incorporado expect(recibido).toEqual(esperado)?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para imprimir una diferencia de objeto agradable entre los dos objetos en un comparador personalizado de Jest, puedes utilizar el paquete jest-matcher-utils.

    Primero, instala el paquete ejecutando npm install jest-matcher-utils --save-dev.

    Luego, importa el paquete en tu archivo de comparador:

    const { diff, ensureExpectedIsNonNegativeInteger } = require('jest-matcher-utils');
    

    Luego puedes utilizar la función diff para obtener una representación de cadena de la diferencia entre los dos objetos. Aquí tienes un ejemplo de cómo puedes usarlo en tu comparador toTorgle:

    expect.extend({
      toTorgle(received, expected) {
        const pass = /*comparar los objetos aquí*/;
        if (pass) {
          return {
            pass: true,
            message: () => `expect(received).not.toTorgle(expected)`
          };
        } else {
          const diffString = diff(expected, received, { expand: true });
          return {
            pass: false,
            message: () => `
              expect(received).toTorgle(expected):
              ${diffString}
            `
          };
        }
      }
    });
    

    Observa cómo se utiliza la función diff para obtener una representación de cadena de la diferencia entre los dos objetos. La opción expand: true se utiliza para mostrar la estructura anidada completa de los objetos.

    Con esta configuración, cuando llames a expect(received).toTorgle(expected), obtendrás una salida de diferencia agradable si los objetos no coinciden.

Comments are closed.