Búsqueda de sitios web

javascript - ¿Hay alguna manera de usar toHaveBeenCalledWith de jest para verificar la longitud del arreglo de argumentos?


La función se llamaría con:

{ items: [1, 2, 3]}
expect(mockedFunction).toHaveBeenCalledWith(
      expect.objectContaining({
        items: expect.toBeLengthOf(3) // Pseudocode, this function does not exist here
      }),
    );

Respuesta #1

El objeto .mock en la función simulada tiene una lista .calls en él. Así que

expect(
  mockedFunction.mock.calls[mockedFunction.mock.calls.length - 1][0].items
).toHaveLength(3);

validará la longitud de la propiedad items en el primer argumento (numeración basada en 0) por última vez (mockedFunction.mock.calls.length - 1) que ha sido llamado.

También puedes considerar usar expect.anything() como un marcador de posición:

expect(mockedFunction).toHaveBeenLastCalledWith(
  expect.objectContaining({
    items: [expect.anything(), expect.anything(), expect.anything()]
  })
)

Pero puede ser mejor usar un simulacro y devolver los mismos valores de manera consistente, esto te permitirá validar el contenido del arreglo en lugar de solo su longitud

Respuesta #2

Podrías anidar expect.objectContaining y verificar la propiedad length del arreglo:

expect(mockedFunction).toHaveBeenCalledWith(
      expect.objectContaining({
        items: expect.objectContaining({ length: 3})
      }),
    );

Artículos relacionados